From 44916682219a846512cd1a28e74695556922bbee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petar=20Maksimovi=C4=87?= Date: Fri, 23 Aug 2024 19:34:21 +0200 Subject: [PATCH] General slot updates and test suite extension (#2587) * extending test suites * not running structured mcd tests with booster-dev * more general slot update and division lemmas * normalisation of *Int * multiplication normalisation continuation * additional lemma * additional lemma * functional spec passing * correction * mcd should not use slot updates, lemma corrections * typo * commutativity lemma * lemma corrections * correcting the double requires... * minor corrections * further refinements * corrections * refining lemmas, adding tests * formatting error correction... * further corrections * more owises and test suite * unconditional overflow trim --- .../src/kevm_pyk/kproj/evm-semantics/buf.md | 10 +- .../kevm_pyk/kproj/evm-semantics/evm-types.md | 6 +- .../lemmas/bytes-simplification.k | 18 +- .../lemmas/evm-int-simplification.k | 2 +- .../evm-semantics/lemmas/int-simplification.k | 30 +- .../kproj/evm-semantics/lemmas/lemmas.k | 44 +- .../kproj/evm-semantics/lemmas/slot-updates.k | 137 ++++ .../kproj/evm-semantics/serialization.md | 6 +- kevm-pyk/src/tests/integration/test_prove.py | 39 +- tests/failing-symbolic.haskell-booster-dev | 24 + tests/specs/examples/erc721-spec.md | 2 +- tests/specs/functional/slot-updates-spec.k | 140 +++++ tests/specs/mcd-structured/bin_runtime.k | 126 ++++ .../mcd-structured/cat-exhaustiveness-spec.k | 100 +++ .../cat-file-addr-pass-rough-spec.k | 117 ++++ .../dai-adduu-fail-rough-spec.k | 112 ++++ .../mcd-structured/dai-symbol-pass-spec.k | 104 ++++ .../dstoken-approve-fail-rough-spec.k | 117 ++++ .../dsvalue-peek-pass-rough-spec.k | 110 ++++ .../mcd-structured/dsvalue-read-pass-spec.k | 113 ++++ .../dsvalue-read-pass-summarize-spec.k | 145 +++++ .../mcd-structured/end-cash-pass-rough-spec.k | 479 ++++++++++++++ .../mcd-structured/end-pack-pass-rough-spec.k | 486 +++++++++++++++ .../mcd-structured/end-subuu-pass-spec.k | 107 ++++ .../flapper-yank-pass-rough-spec.k | 302 +++++++++ .../flipper-addu48u48-fail-rough-spec.k | 112 ++++ .../flipper-bids-pass-rough-spec.k | 122 ++++ .../mcd-structured/flipper-tau-pass-spec.k | 109 ++++ .../mcd-structured/flipper-ttl-pass-spec.k | 107 ++++ .../mcd-structured/flopper-cage-pass-spec.k | 121 ++++ ...-dent-guy-diff-tic-not-0-pass-rough-spec.k | 508 +++++++++++++++ .../flopper-dent-guy-same-pass-rough-spec.k | 351 +++++++++++ .../flopper-file-pass-rough-spec.k | 127 ++++ .../flopper-kick-pass-rough-spec.k | 239 +++++++ .../flopper-tick-pass-rough-spec.k | 228 +++++++ tests/specs/mcd-structured/functional-spec.k | 119 ++++ .../mcd-structured/pot-join-pass-rough-spec.k | 488 +++++++++++++++ tests/specs/mcd-structured/storage.k | 375 +++++++++++ .../vat-addui-fail-rough-spec.k | 112 ++++ .../mcd-structured/vat-arithmetic-spec.k | 589 ++++++++++++++++++ .../specs/mcd-structured/vat-dai-pass-spec.k | 107 ++++ .../vat-deny-diff-fail-rough-spec.k | 120 ++++ .../vat-flux-diff-pass-rough-spec.k | 125 ++++ .../mcd-structured/vat-flux-diff-pass-spec.k | 132 ++++ .../mcd-structured/vat-fold-pass-rough-spec.k | 142 +++++ .../vat-fork-diff-pass-rough-spec.k | 154 +++++ .../vat-frob-diff-zero-dart-pass-rough-spec.k | 156 +++++ .../specs/mcd-structured/vat-heal-pass-spec.k | 132 ++++ .../mcd-structured/vat-move-diff-rough-spec.k | 127 ++++ .../specs/mcd-structured/vat-sin-pass-spec.k | 107 ++++ .../mcd-structured/vat-slip-pass-rough-spec.k | 122 ++++ tests/specs/mcd-structured/vat-spec.k | 33 + .../vat-subui-fail-rough-spec.k | 112 ++++ tests/specs/mcd-structured/verification.k | 406 ++++++++++++ .../mcd-structured/vow-fess-fail-rough-spec.k | 229 +++++++ .../mcd-structured/vow-flog-fail-rough-spec.k | 324 ++++++++++ tests/specs/mcd-structured/word-pack.k | 29 + tests/specs/mcd/verification.k | 4 +- tests/specs/mcd/word-pack.k | 8 +- tests/specs/smoke | 18 + 60 files changed, 9099 insertions(+), 71 deletions(-) create mode 100644 kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/slot-updates.k create mode 100644 tests/specs/functional/slot-updates-spec.k create mode 100644 tests/specs/mcd-structured/bin_runtime.k create mode 100644 tests/specs/mcd-structured/cat-exhaustiveness-spec.k create mode 100644 tests/specs/mcd-structured/cat-file-addr-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/dai-adduu-fail-rough-spec.k create mode 100644 tests/specs/mcd-structured/dai-symbol-pass-spec.k create mode 100644 tests/specs/mcd-structured/dstoken-approve-fail-rough-spec.k create mode 100644 tests/specs/mcd-structured/dsvalue-peek-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/dsvalue-read-pass-spec.k create mode 100644 tests/specs/mcd-structured/dsvalue-read-pass-summarize-spec.k create mode 100644 tests/specs/mcd-structured/end-cash-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/end-pack-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/end-subuu-pass-spec.k create mode 100644 tests/specs/mcd-structured/flapper-yank-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/flipper-addu48u48-fail-rough-spec.k create mode 100644 tests/specs/mcd-structured/flipper-bids-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/flipper-tau-pass-spec.k create mode 100644 tests/specs/mcd-structured/flipper-ttl-pass-spec.k create mode 100644 tests/specs/mcd-structured/flopper-cage-pass-spec.k create mode 100644 tests/specs/mcd-structured/flopper-dent-guy-diff-tic-not-0-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/flopper-dent-guy-same-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/flopper-file-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/flopper-kick-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/flopper-tick-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/functional-spec.k create mode 100644 tests/specs/mcd-structured/pot-join-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/storage.k create mode 100644 tests/specs/mcd-structured/vat-addui-fail-rough-spec.k create mode 100644 tests/specs/mcd-structured/vat-arithmetic-spec.k create mode 100644 tests/specs/mcd-structured/vat-dai-pass-spec.k create mode 100644 tests/specs/mcd-structured/vat-deny-diff-fail-rough-spec.k create mode 100644 tests/specs/mcd-structured/vat-flux-diff-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/vat-flux-diff-pass-spec.k create mode 100644 tests/specs/mcd-structured/vat-fold-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/vat-fork-diff-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/vat-frob-diff-zero-dart-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/vat-heal-pass-spec.k create mode 100644 tests/specs/mcd-structured/vat-move-diff-rough-spec.k create mode 100644 tests/specs/mcd-structured/vat-sin-pass-spec.k create mode 100644 tests/specs/mcd-structured/vat-slip-pass-rough-spec.k create mode 100644 tests/specs/mcd-structured/vat-spec.k create mode 100644 tests/specs/mcd-structured/vat-subui-fail-rough-spec.k create mode 100644 tests/specs/mcd-structured/verification.k create mode 100644 tests/specs/mcd-structured/vow-fess-fail-rough-spec.k create mode 100644 tests/specs/mcd-structured/vow-flog-fail-rough-spec.k create mode 100644 tests/specs/mcd-structured/word-pack.k diff --git a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/buf.md b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/buf.md index 24796702bb..40b09b5fa1 100644 --- a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/buf.md +++ b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/buf.md @@ -11,7 +11,7 @@ module BUF-SYNTAX Both `#bufStrict(SIZE, DATA)` and `#buf(SIZE, DATA)` represents a symbolic byte array of length `SIZE` bytes, left-padded with zeroes. Version `#bufStrict` is partial and only defined when `DATA` is in the range given by `SIZE`. It rewrites to `#buf` when data is in range, and is expected to immediately evaluate into `#buf` in all contexts. -Version `#buf` is total and artificially defined `modulo 2 ^Int (SIZE *Int 8)`. +Version `#buf` is total and artificially defined `modulo 2 ^Int (8 *Int SIZE)`. This division is required to facilitate symbolic reasoning in Haskell backend, because Haskell has limitations when dealing with partial functions. @@ -36,17 +36,17 @@ module BUF syntax Int ::= #powByteLen ( Int ) [symbol(#powByteLen), function, no-evaluators] // --------------------------------------------------------------------------------- - // rule #powByteLen(SIZE) => 2 ^Int (SIZE *Int 8) - rule 2 ^Int (SIZE *Int 8) => #powByteLen(SIZE) [symbolic(SIZE), simplification] + // rule #powByteLen(SIZE) => 2 ^Int (8 *Int SIZE) + rule 2 ^Int (8 *Int SIZE) => #powByteLen(SIZE) [symbolic(SIZE), simplification] rule 0 true requires 0 <=Int SIZE [simplification, preserves-definedness] rule SIZE true requires 0 <=Int SIZE [simplification, preserves-definedness] rule #write(WM, IDX, VAL) => WM [ IDX := #buf(1, VAL) ] [simplification] rule #bufStrict(SIZE, DATA) => #buf(SIZE, DATA) - requires #range(0 <= DATA < (2 ^Int (SIZE *Int 8))) + requires #range(0 <= DATA < (2 ^Int (8 *Int SIZE))) - rule #buf(SIZE, DATA) => #padToWidth(SIZE, #asByteStack(DATA %Int (2 ^Int (SIZE *Int 8)))) + rule #buf(SIZE, DATA) => #padToWidth(SIZE, #asByteStack(DATA %Int (2 ^Int (8 *Int SIZE)))) requires 0 .Bytes [owise, concrete] // SIZE <= 0 diff --git a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm-types.md b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm-types.md index da83d35e72..f284a4db83 100644 --- a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm-types.md +++ b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm-types.md @@ -190,8 +190,8 @@ Bitwise logical operators are lifted from the integer versions. rule bit (N, _) => 0 requires notBool (N >=Int 0 andBool N 0 requires notBool (N >=Int 0 andBool N bitRangeInt(W , (255 -Int N) , 1) requires N >=Int 0 andBool N bitRangeInt(W , ( 31 -Int N) *Int 8 , 8) requires N >=Int 0 andBool N bitRangeInt(W , (255 -Int N) , 1) requires N >=Int 0 andBool N bitRangeInt(W , 8 *Int (31 -Int N) , 8) requires N >=Int 0 andBool N (1 <=Int 0 - rule #nBytes(N) => #nBits(N *Int 8) requires N >=Int 0 + rule #nBytes(N) => #nBits(8 *Int N) requires N >=Int 0 ``` - `signextend(N, W)` sign-extends from byte `N` of `W` (0 being MSB). diff --git a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/bytes-simplification.k b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/bytes-simplification.k index 2418b16b33..5d2f2f8cfd 100644 --- a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/bytes-simplification.k +++ b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/bytes-simplification.k @@ -75,7 +75,7 @@ module BYTES-SIMPLIFICATION [symbolic] rule [buf-asWord-invert-rl]: #asWord ( #buf ( WB:Int, X:Int ) ) => X requires 0 <=Int WB andBool 0 <=Int X andBool - ( ( WB <=Int 32 andBool X Int 32 andBool X X requires 0 <=Int WB andBool 0 <=Int X andBool 0 <=Int S andBool 0 <=Int WR andBool S +Int WR ==Int WB - andBool X #asWord ( B ) + requires #asInteger ( BZ ) ==Int 0 + [simplification, concrete(BZ)] + + rule [asWord-trim-overflowing-zeros]: + #asWord ( B ) => #asWord ( #range(B, lengthBytes(B) -Int 32, 32) ) + requires 32 #buf(W1 +Int W2, 0) requires 0 <=Int W1 andBool 0 <=Int W2 @@ -189,13 +199,13 @@ module BYTES-SIMPLIFICATION [symbolic] rule [range-buf-zero-concat]: B:Bytes +Bytes #buf(W:Int, X:Int) => #buf(lengthBytes(B) +Int W, X) - requires 0 <=Int W andBool 0 <=Int X andBool X #buf(lengthBytes(B1) +Int W, X) +Bytes B2 - requires 0 <=Int W andBool 0 <=Int X andBool X true - requires 2 ^Int ( lengthBytes(BA) *Int 8) <=Int X + requires 2 ^Int ( 8 *Int lengthBytes(BA) ) <=Int X [concrete(X), simplification] rule [asWord-lt-concat]: diff --git a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/int-simplification.k b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/int-simplification.k index 66f345089b..265be3c071 100644 --- a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/int-simplification.k +++ b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/int-simplification.k @@ -6,11 +6,9 @@ module INT-SIMPLIFICATION-HASKELL [symbolic] imports INT-SIMPLIFICATION-COMMON // ########################################################################### - // add, sub + // add, sub: associativity normalization // ########################################################################### - // associativity normalization - rule A +Int (B +Int C) => (A +Int B) +Int C [symbolic(A, B), concrete(C), simplification(40)] rule A +Int (B -Int C) => (A +Int B) -Int C [symbolic(A, B), concrete(C), simplification(40)] rule A -Int (B +Int C) => (A -Int B) -Int C [symbolic(A, B), concrete(C), simplification(40)] @@ -30,7 +28,7 @@ module INT-SIMPLIFICATION-HASKELL [symbolic] rule (A -Int B) -Int C => A -Int (B +Int C) [concrete(B, C), symbolic(A), simplification(40)] // ########################################################################### - // comparison normalization + // add, sub: comparison normalization // ########################################################################### rule A +Int B A Int C +Int D => A -Int C >Int D -Int B [concrete(B, D), symbolic(A, C), simplification(45)] rule A +Int B >=Int C +Int D => A -Int C >=Int D -Int B [concrete(B, D), symbolic(A, C), simplification(45)] - rule A +Int B ==Int C +Int D => A -Int C ==Int D -Int B [concrete(B, D), symbolic(A, C), simplification(45)] + rule A +Int B ==Int A => B ==Int 0 [simplification(40)] + rule A +Int B ==Int B => A ==Int 0 [simplification(40)] + rule A +Int B ==Int C +Int B => A ==Int C [simplification(40)] + rule A +Int B ==Int C +Int D => A -Int C ==Int D -Int B [simplification(45), symbolic(A, C), concrete(B, D)] - rule { A +Int B #Equals C +Int D } => { A -Int C #Equals D -Int B } [concrete(B, D), symbolic(A, C), simplification(45)] + rule { A +Int B #Equals A } => { B #Equals 0 } [simplification(40)] + rule { A +Int B #Equals B } => { A #Equals 0 } [simplification(40)] + rule { A +Int B #Equals C +Int B } => { A #Equals C } [simplification(40)] + rule { A +Int B #Equals C +Int D } => { A -Int C #Equals D -Int B } [simplification(45), symbolic(A, C), concrete(B, D)] endmodule @@ -134,10 +138,10 @@ module INT-SIMPLIFICATION-COMMON // mul // ########################################################################### + rule A *Int B => B *Int A [simplification, symbolic(A), concrete(B)] + rule 1 *Int A => A [simplification] - rule A *Int 1 => A [simplification] rule 0 *Int _ => 0 [simplification] - rule _ *Int 0 => 0 [simplification] rule (A *Int C) +Int (B *Int C) => (A +Int B) *Int C [simplification] rule (A *Int C) -Int (B *Int C) => (A -Int B) *Int C [simplification] @@ -151,11 +155,15 @@ module INT-SIMPLIFICATION-COMMON rule A /Int 1 => A [simplification, preserves-definedness] // safeMath mul check c / a == b where c == a * b - rule (A *Int B) /Int A => B requires A =/=Int 0 [simplification, preserves-definedness] + rule (A *Int B) /Int A => B requires notBool A ==Int 0 [simplification, preserves-definedness] + rule (B *Int A) /Int A => B requires notBool A ==Int 0 [simplification, preserves-definedness] - rule ((A *Int B) /Int C) /Int B => A /Int C requires B =/=Int 0 andBool C =/=Int 0 [simplification, preserves-definedness] + rule ((A *Int B) /Int C) /Int B => A /Int C requires 0 B /Int C requires 0 A requires A modInt 32 ==Int 0 [simplification, preserves-definedness] + rule (A *Int B) /Int C => B *Int (A /Int C) + requires notBool C ==Int 0 andBool A modInt C ==Int 0 + [simplification, concrete(A, C), preserves-definedness] rule (A *Int B) /Int C <=Int D => true requires 0 <=Int A andBool 0 <=Int B andBool 0 true requires 0 <=Int I [simplification, smt-lemma] rule 0 <=Int #ceil32(I) -Int I => true requires 0 <=Int I [simplification] - rule X *Int Y true requires Y <=Int maxUInt256 /Int X [simplification] + rule X *Int Y true + requires (0 <=Int X orBool 0 <=Int Y) andBool Y <=Int maxUInt256 /Int X + [simplification] + rule #if B #then C +Int C1 #else C +Int C2 #fi => C +Int #if B #then C1 #else C2 #fi [simplification] // ######################## // Set Reasoning // ######################## - rule X in (SetItem(Y) _ ) => true requires X ==Int Y [simplification] - rule X in (SetItem(Y) REST) => X in REST requires X =/=Int Y [simplification] + rule X in (SetItem(Y) _ ) => true requires X ==Int Y [simplification] + rule X in (SetItem(Y) REST) => X in REST requires notBool ( X ==Int Y ) [simplification] rule ( S:Set |Set SetItem ( X ) ) |Set SetItem( X ) => ( S:Set |Set SetItem ( X ) ) [simplification] rule ( ( S:Set |Set SetItem ( X ) ) |Set SetItem ( Y ) ) |Set SetItem( X ) => ( ( S:Set |Set SetItem ( X ) ) |Set SetItem ( Y ) ) [simplification] @@ -51,9 +58,6 @@ module LEMMAS [symbolic] rule 1 |Int bool2Word(_B) => 1 [simplification] rule 1 &Int bool2Word( B) => bool2Word(B) [simplification] - rule bool2Word(_B) |Int 1 => 1 [simplification] - rule bool2Word( B) &Int 1 => bool2Word(B) [simplification] - // #newAddr range rule 0 <=Int #newAddr(_,_) => true [simplification] rule #newAddr(_,_) true [simplification] @@ -77,11 +81,11 @@ module LEMMAS [symbolic] rule #lookup( _M:Map , _ ) true [simplification, smt-lemma] rule #lookup ( _M:Map [ K1 <- V1 ] , K2 ) => #lookup ( K1 |-> V1 , K1 ) requires K1 ==Int K2 [simplification] - rule #lookup ( M:Map [ K1 <- _ ] , K2 ) => #lookup ( M , K2 ) requires K1 =/=Int K2 [simplification] - rule #lookup ( (K1:Int |-> _) M:Map, K2:Int) => #lookup ( M , K2 ) requires K1 =/=Int K2 [simplification] + rule #lookup ( M:Map [ K1 <- _ ] , K2 ) => #lookup ( M , K2 ) requires notBool ( K1 ==Int K2 ) [simplification] + rule #lookup ( (K1:Int |-> _) M:Map, K2:Int) => #lookup ( M , K2 ) requires notBool ( K1 ==Int K2 ) [simplification] rule M:Map [ I1:Int <- V1:Int ] [ I2:Int <- V2:Int ] ==K M:Map [ I2 <- V2 ] [ I1 <- V1 ] => true - requires I1 =/=Int I2 + requires notBool ( I1 ==Int I2 ) [simplification] // Hardcoded #addrFromPrivateKey simplifications, see: https://github.com/runtimeverification/haskell-backend/issues/3573 @@ -91,18 +95,16 @@ module LEMMAS [symbolic] // Memory // ######################## - rule #memoryUsageUpdate(MU, _, WIDTH) => MU requires WIDTH <=Int 0 [simplification] + rule #memoryUsageUpdate(MU, _, WIDTH) => MU requires 0 <=Int MU andBool WIDTH <=Int 0 [simplification] - rule 0 <=Int #memoryUsageUpdate(MU, START, WIDTH) => true requires 0 <=Int MU andBool 0 <=Int START andBool 0 <=Int WIDTH [simplification] + rule 0 <=Int #memoryUsageUpdate(MU, START, WIDTH) => true requires 0 <=Int MU orBool ( 0 <=Int START andBool 0 <=Int WIDTH ) [simplification] rule #memoryUsageUpdate(#memoryUsageUpdate(MU, START1, WIDTH1), START2, WIDTH2) => #memoryUsageUpdate(MU, START1, WIDTH1) - requires #rangeUInt(256, MU) andBool 0 #memoryUsageUpdate(MU, START2, WIDTH2) - requires #rangeUInt(256, MU) andBool 0 #asWord(#range(BUF, 0, lengthBytes(BUF) -Int log256Int(D))) - requires D ==Int 256 ^Int log256Int(D) andBool D >=Int 0 - andBool lengthBytes(BUF) >=Int log256Int(D) [simplification, preserves-definedness] + requires 0 X ==Int 1 requires #rangeBool(X) [simplification] rule notBool (X ==Int 1) => X ==Int 0 requires #rangeBool(X) [simplification] @@ -171,8 +173,6 @@ module LEMMAS-HASKELL [symbolic] // Arithmetic // ######################## - rule N modInt pow160 => N requires #rangeUInt(160, N) [simplification] - // ; Z3 version 4.8.12 // (set-option :smt.mbqi true) // @@ -200,7 +200,7 @@ module LEMMAS-HASKELL [symbolic] // ######################## rule { M:Map [ I1:Int <- V1:Int ] [ I2:Int <- V2:Int ] #Equals M:Map [ I2 <- V2 ] [ I1 <- V1 ] } => #Top - requires I1 =/=Int I2 + requires notBool ( I1 ==Int I2 ) [simplification] // ######################## diff --git a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/slot-updates.k b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/slot-updates.k new file mode 100644 index 0000000000..bcd8780843 --- /dev/null +++ b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/lemmas/slot-updates.k @@ -0,0 +1,137 @@ +requires "word.md" + +module SLOT-UPDATES [symbolic] + imports EVM-TYPES + imports BUF + imports WORD + + // ########################################################################### + // Auxiliaries + // ########################################################################### + + // Index of first bit that equals one + syntax Int ::= #getFirstOneBit(Int) [function, total] + + rule [gfo-succ]: #getFirstOneBit(X:Int) => log2Int ( X &Int ( ( maxUInt256 xorInt X ) +Int 1 ) ) requires #rangeUInt(256, X) andBool X =/=Int 0 [preserves-definedness] + rule [gfo-fail]: #getFirstOneBit(_:Int) => -1 [owise] + + // Index of first bit that equals zero + syntax Int ::= #getFirstZeroBit(Int) [function, total] + + rule [gfz-succ]: #getFirstZeroBit(X:Int) => #getFirstOneBit ( maxUInt256 xorInt X ) requires #rangeUInt(256, X) [preserves-definedness] + rule [gfz-fail]: #getFirstZeroBit(_:Int) => -1 [owise] + + // Slot updates are performed by the compiler with the help of masks, + // which are 256-bit integers of the form 11111111100000000000111111111111111 + // |- WIDTH -||- SHIFT -| + + // Shift of a mask, in bits and in bytes + syntax Int ::= #getMaskShiftBits(Int) [function, total] + syntax Int ::= #getMaskShiftBytes(Int) [function, total] + + rule [gms-bits]: #getMaskShiftBits(X:Int) => #getFirstZeroBit(X) + + rule [gms-bits-succ]: #getMaskShiftBytes(X:Int) => #getFirstZeroBit(X) /Int 8 requires #getMaskShiftBits(X) modInt 8 ==Int 0 [preserves-definedness] + rule [gms-bits-fail]: #getMaskShiftBytes(_:Int) => -1 [owise] + + // Width of a mask, in bits and in bytes + syntax Int ::= #getMaskWidthBits(Int) [function, total] + syntax Int ::= #getMaskWidthBytes(Int) [function, total] + + rule [gmw-bits-succ-1]: #getMaskWidthBits(X:Int) => 256 -Int #getMaskShiftBits(X:Int) requires 0 <=Int #getMaskShiftBits(X) andBool 0 ==Int X >>Int #getMaskShiftBits(X) [preserves-definedness] + rule [gmw-bits-succ-2]: #getMaskWidthBits(X:Int) => #getFirstOneBit(X >>Int #getMaskShiftBits(X)) requires 0 <=Int #getMaskShiftBits(X) andBool 0 >Int #getMaskShiftBits(X) [preserves-definedness] + rule [gmw-bits-fail]: #getMaskWidthBits(_:Int) => -1 [owise] + + rule [gmw-bytes-succ]: #getMaskWidthBytes(X:Int) => #getMaskWidthBits(X) /Int 8 requires #getMaskWidthBits(X) modInt 8 ==Int 0 [preserves-definedness] + rule [gmw-bytes-fail]: #getMaskWidthBytes(_:Int) => -1 [owise] + + // Mask recogniser + syntax Bool ::= #isMask(Int) [function, total] + + // A number is a mask if it has a valid shift, and a valid width, and all remaining bits set to one + rule [is-mask-true]: + #isMask(X:Int) => maxUInt256 ==Int X |Int ( 2 ^Int ( #getMaskShiftBits(X) +Int #getMaskWidthBits(X) ) -Int 1 ) + requires 0 <=Int #getMaskShiftBytes(X) andBool 0 <=Int #getMaskWidthBytes(X) + [preserves-definedness] + + // and is not a mask otherwise + rule [is-mask-false]: #isMask(_:Int) => false [owise] + + // Shift recogniser + syntax Bool ::= #isByteShift(Int) [function, total] + + // A number is a shift if it is non-zero, in the Word range, and a power of two divisible by 8 + rule #isByteShift(X) => X ==Int 2 ^Int log2Int(X) andBool log2Int(X) modInt 8 ==Int 0 requires 0 false [owise] + + // ########################################################################### + // Masking lemmas + // ########################################################################### + + // Slot updates are of the general form (SHIFT *Int VALUE) |Int (MASK &Int #asWord( SLOT:Bytes )), + // where the masking clears the part of the slot into which VALUE will be stored, + // and for VALUE to be stored correctly it first has to be shifted appropriately. + // Note that SHIFT and MASK are always concrete. + // + // We perform this update in several stages: + // 1. First, we simplify MASK &Int #asWord( SLOT ), which results in + // ( VALUE *Int SHIFT ) |Int #asWord ( B1 +Bytes ... +Bytes BN ). + // 2. Then, we isolate the +Bytes-junct(s) that will be overwritten. + // 3. Then, we write the VALUE, possibly splitting the identified +Bytes-junct(s). + // + // Note that we require additional simplifications to account for the fact that + // VALUE and SLOT can also be concrete. In the former case, we need to extract the + // SHIFT appropriate, and in the latter case, the slot will appear on the LHS of the |Int. + + // 1. Slot masking using &Int + rule [mask-b-and]: + MASK:Int &Int SLOT:Int => + #asWord ( #buf ( 32, SLOT ) [ 32 -Int ( #getMaskShiftBytes(MASK) +Int #getMaskWidthBytes(MASK) ) := #buf ( #getMaskWidthBytes(MASK), 0 ) ] ) + requires #isMask(MASK) andBool #rangeUInt(256, SLOT) + [simplification, concrete(MASK), preserves-definedness] + + // 2a. |Int and +Bytes, update to be done in left + rule [bor-update-to-left]: + A |Int #asWord ( B1 +Bytes B2 ) => + #asWord ( #buf ( 32 -Int lengthBytes(B2), (A /Int (2 ^Int (8 *Int lengthBytes(B2)))) |Int #asWord ( B1 ) ) +Bytes B2 ) + requires #rangeUInt(256, A) andBool A modInt (2 ^Int (8 *Int lengthBytes(B2))) ==Int 0 andBool lengthBytes(B1 +Bytes B2) <=Int 32 + [simplification, preserves-definedness] + + // 2b. |Int of +Bytes, update to be done in right + rule [bor-update-to-right]: + A |Int #asWord ( B1 +Bytes B2 ) => + #asWord ( B1 +Bytes #buf ( lengthBytes(B2), A |Int #asWord ( B2 ) ) ) + requires 0 <=Int A andBool A #asWord ( #buf( 32 -Int ( log2Int(SHIFT) /Int 8 ), X ) +Bytes #buf( log2Int(SHIFT) /Int 8, Y ) ) + requires #isByteShift(SHIFT) + andBool 0 <=Int X andBool X #range(B, lengthBytes(B) -Int W, W) + requires 0 <=Int W andBool W <=Int 32 andBool W #buf( W -Int ( log2Int(SHIFT) /Int 8 ), X ) +Bytes #buf( log2Int(SHIFT) /Int 8, 0) + requires 0 <=Int W andBool W <=Int 32 andBool #isByteShift(SHIFT) + andBool 0 <=Int X andBool X #asWord ( #buf ( 32 -Int #getFirstOneBit(X) /Int 8, X /Int ( 2 ^Int ( 8 *Int ( #getFirstOneBit(X) /Int 8 ) ) ) ) +Bytes + #buf ( #getFirstOneBit(X) /Int 8, Y ) ) + requires #rangeUInt(256, X) andBool 0 <=Int #getFirstOneBit(X) + andBool 0 <=Int Y andBool Y .Bytes requires notBool lengthBytes(B) >Int 0 - rule #byteify ( B ) => #range( #asByteStack ( B[0] *Int 16 +Int B[1] ), 0, 1 ) + rule #byteify ( B ) => #range( #asByteStack ( 16 *Int B[0] +Int B[1] ), 0, 1 ) +Bytes #byteify ( #range( B, 2, lengthBytes(B) -Int 2 ) ) requires lengthBytes(B) >Int 0 @@ -568,10 +568,10 @@ Merkle Tree Aux Functions syntax Bytes ::= #HPEncode ( Bytes, Int ) [symbol(#HPEncode), function] // ----------------------------------------------------------------------- - rule #HPEncode ( X, T ) => #asByteStack ( ( HPEncodeAux(T) +Int 1 ) *Int 16 +Int X[0] ) +Bytes #byteify( #range(X, 1, lengthBytes(X) -Int 1) ) + rule #HPEncode ( X, T ) => #asByteStack ( 16 *Int ( HPEncodeAux(T) +Int 1 ) +Int X[0] ) +Bytes #byteify( #range(X, 1, lengthBytes(X) -Int 1) ) requires lengthBytes(X) %Int 2 =/=Int 0 - rule #HPEncode ( X, T ) => #range(#asByteStack ( HPEncodeAux(T) *Int 16 ), 0, 1) +Bytes #byteify( X ) + rule #HPEncode ( X, T ) => #range(#asByteStack ( 16 *Int HPEncodeAux(T) ), 0, 1) +Bytes #byteify( X ) requires notBool lengthBytes(X) %Int 2 =/=Int 0 syntax Int ::= HPEncodeAux ( Int ) [symbol(HPEncodeAux), function] diff --git a/kevm-pyk/src/tests/integration/test_prove.py b/kevm-pyk/src/tests/integration/test_prove.py index f4814770b9..5e586fd1f1 100644 --- a/kevm-pyk/src/tests/integration/test_prove.py +++ b/kevm-pyk/src/tests/integration/test_prove.py @@ -1,6 +1,7 @@ from __future__ import annotations import logging +import shutil import sys from typing import TYPE_CHECKING, NamedTuple @@ -56,7 +57,10 @@ def spec_files(dir_name: str, glob: str) -> tuple[Path, ...]: EXAMPLES_TESTS: Final = spec_files('examples', '*-spec.k') + spec_files('examples', '*-spec.md') MCD_TESTS: Final = spec_files('mcd', '*-spec.k') VAT_TESTS: Final = spec_files('mcd', 'vat*-spec.k') +MCD_STRUCTURED_TESTS: Final = spec_files('mcd-structured', '*-spec.k') +VAT_STRUCTURED_TESTS: Final = spec_files('mcd-structured', 'vat*-spec.k') NON_VAT_MCD_TESTS: Final = tuple(test for test in MCD_TESTS if test not in VAT_TESTS) +NON_VAT_MCD_STRUCTURED_TESTS: Final = tuple(test for test in MCD_STRUCTURED_TESTS if test not in VAT_STRUCTURED_TESTS) KONTROL_TESTS: Final = spec_files('kontrol', '*-spec.k') FUNCTIONAL_TESTS: Final = spec_files('functional', '*-spec.k') @@ -66,13 +70,14 @@ def spec_files(dir_name: str, glob: str) -> tuple[Path, ...]: ERC20_TESTS, EXAMPLES_TESTS, NON_VAT_MCD_TESTS, + NON_VAT_MCD_STRUCTURED_TESTS, KONTROL_TESTS, ], (), ) ALL_TESTS: Final = sum( - [RULE_TESTS, FUNCTIONAL_TESTS, VAT_TESTS], + [RULE_TESTS, FUNCTIONAL_TESTS, VAT_TESTS, VAT_STRUCTURED_TESTS], (), ) @@ -106,14 +111,17 @@ def exclude_list(exclude_file: Path) -> list[Path]: 'functional/lemmas-spec.k': 'lemmas-spec.k', 'functional/abi-spec.k': 'abi-spec.k', 'functional/merkle-spec.k': 'merkle-spec.k', + 'functional/slot-updates-spec.k': 'slot-updates-spec.k', 'functional/storageRoot-spec.k': 'storageRoot-spec.k', 'mcd/functional-spec.k': 'functional-spec.k', + 'mcd-structured/functional-spec.k': 'functional-spec.k', } KOMPILE_MAIN_MODULE: Final = { 'benchmarks/functional-spec.k': 'FUNCTIONAL-SPEC-SYNTAX', 'erc20/functional-spec.k': 'FUNCTIONAL-SPEC-SYNTAX', 'mcd/functional-spec.k': 'FUNCTIONAL-SPEC-SYNTAX', + 'mcd-structured/functional-spec.k': 'FUNCTIONAL-SPEC-SYNTAX', } @@ -199,6 +207,7 @@ def _test_prove( # Given log_file = tmp_path / 'log.txt' use_directory = tmp_path / 'kprove' + shutil.rmtree(use_directory, ignore_errors=True) use_directory.mkdir() # When @@ -375,20 +384,20 @@ def test_prove_dss( force_sequential: bool, bug_report: BugReport | None, ) -> None: - spec_file = REPO_ROOT / 'tests/specs/mcd/vat-spec.k' - _test_prove( - spec_file, - kompiled_target_for, - tmp_path, - caplog, - False, - force_sequential, - False, - bug_report=bug_report, - spec_name=None, - workers=8, - direct_subproof_rules=True, - ) + for spec_file in [REPO_ROOT / 'tests/specs/mcd/vat-spec.k', REPO_ROOT / 'tests/specs/mcd-structured/vat-spec.k']: + _test_prove( + spec_file, + kompiled_target_for, + tmp_path, + caplog, + False, + force_sequential, + False, + bug_report=bug_report, + spec_name=None, + workers=8, + direct_subproof_rules=True, + ) def test_prove_optimizations( diff --git a/tests/failing-symbolic.haskell-booster-dev b/tests/failing-symbolic.haskell-booster-dev index 5783a2eaf6..a3ab6a12db 100644 --- a/tests/failing-symbolic.haskell-booster-dev +++ b/tests/failing-symbolic.haskell-booster-dev @@ -66,6 +66,7 @@ tests/specs/functional/int-simplifications-spec.k tests/specs/functional/lemmas-no-smt-spec.k tests/specs/functional/lemmas-spec.k tests/specs/functional/merkle-spec.k +tests/specs/functional/slot-updates.k tests/specs/functional/storageRoot-spec.k tests/specs/kontrol/test-allowchangestest-testallow-0-spec.k tests/specs/kontrol/test-allowchangestest-testallow_fail-0-spec.k @@ -112,3 +113,26 @@ tests/specs/mcd/functional-spec.k tests/specs/mcd/pot-join-pass-rough-spec.k tests/specs/mcd/vow-fess-fail-rough-spec.k tests/specs/mcd/vow-flog-fail-rough-spec.k +tests/specs/mcd-structured/cat-exhaustiveness-spec.k +tests/specs/mcd-structured/cat-file-addr-pass-rough-spec.k +tests/specs/mcd-structured/dstoken-approve-fail-rough-spec.k +tests/specs/mcd-structured/dsvalue-peek-pass-rough-spec.k +tests/specs/mcd-structured/dsvalue-read-pass-spec.k +tests/specs/mcd-structured/dsvalue-read-pass-summarize-spec.k +tests/specs/mcd-structured/end-cash-pass-rough-spec.k +tests/specs/mcd-structured/end-pack-pass-rough-spec.k +tests/specs/mcd-structured/end-subuu-pass-spec.k +tests/specs/mcd-structured/flapper-yank-pass-rough-spec.k +tests/specs/mcd-structured/flipper-bids-pass-rough-spec.k +tests/specs/mcd-structured/flipper-tau-pass-spec.k +tests/specs/mcd-structured/flipper-ttl-pass-spec.k +tests/specs/mcd-structured/flopper-cage-pass-spec.k +tests/specs/mcd-structured/flopper-dent-guy-diff-tic-not-0-pass-rough-spec.k +tests/specs/mcd-structured/flopper-dent-guy-same-pass-rough-spec.k +tests/specs/mcd-structured/flopper-file-pass-rough-spec.k +tests/specs/mcd-structured/flopper-kick-pass-rough-spec.k +tests/specs/mcd-structured/flopper-tick-pass-rough-spec.k +tests/specs/mcd-structured/functional-spec.k +tests/specs/mcd-structured/pot-join-pass-rough-spec.k +tests/specs/mcd-structured/vow-fess-fail-rough-spec.k +tests/specs/mcd-structured/vow-flog-fail-rough-spec.k \ No newline at end of file diff --git a/tests/specs/examples/erc721-spec.md b/tests/specs/examples/erc721-spec.md index 96ebd64ed1..58ec9fc837 100644 --- a/tests/specs/examples/erc721-spec.md +++ b/tests/specs/examples/erc721-spec.md @@ -44,7 +44,7 @@ module VERIFICATION rule X &Int 127 true requires 0 <=Int X andBool X X +Int Y requires 0 <=Int X andBool #rangeUInt(256, Y) andBool X <=Int maxUInt256 -Int Y [simplification, concrete(Y)] - rule ((X +Int 31) /Int 32) *Int 32 <=Int Y => 0 <=Int X andBool X <=Int Y -Int 31 [simplification, concrete(Y)] + rule 32 *Int ((X +Int 31) /Int 32) <=Int Y => 0 <=Int X andBool X <=Int Y -Int 31 [simplification, concrete(Y)] rule 127 &Int X <=Int Y => true requires 0 <=Int X andBool 127 <=Int Y [simplification, concrete(Y)] endmodule diff --git a/tests/specs/functional/slot-updates-spec.k b/tests/specs/functional/slot-updates-spec.k new file mode 100644 index 0000000000..18edd268d5 --- /dev/null +++ b/tests/specs/functional/slot-updates-spec.k @@ -0,0 +1,140 @@ +requires "edsl.md" +requires "lemmas/lemmas.k" + +module VERIFICATION + imports EDSL + imports LEMMAS + + syntax StepSort ::= Map | Bytes | Int | Bool + // -------------------------------------------- + + syntax KItem ::= runLemma ( StepSort ) [symbol(runLemma)] + | doneLemma( StepSort ) + // -------------------------------------- + rule runLemma( T ) => doneLemma( T ) + +endmodule + +module SLOT-UPDATES-SPEC + imports VERIFICATION + + // + // Auxiliary functions + // + + claim [gfob-min]: runLemma( #getFirstOneBit(0 ) ) => doneLemma( -1 ) ... + claim [gfob-max]: runLemma( #getFirstOneBit(maxUInt256) ) => doneLemma( 0 ) ... + + claim [gfzb-min]: runLemma( #getFirstZeroBit(0 ) ) => doneLemma( 0 ) ... + claim [gfzb-max]: runLemma( #getFirstZeroBit(maxUInt256) ) => doneLemma( -1 ) ... + + claim [gmsb-01]: runLemma ( #getMaskShiftBits(0) ) => doneLemma ( 0 ) ... + claim [gmsb-02]: runLemma ( #getMaskShiftBits(2 ^Int 164 -Int 1) ) => doneLemma ( 164 ) ... + claim [gmsb-03]: runLemma ( #getMaskShiftBits(pow256) ) => doneLemma ( -1 ) ... + claim [gmsb-04]: runLemma ( #getMaskShiftBits(115341543235797707419527244145998463631733976271937281205136574426583511597055) ) => doneLemma ( 240 ) ... + claim [gmsb-05]: runLemma ( #getMaskShiftBits(115790322390251417039241401711187164934754157181743689629425282016341011726335) ) => doneLemma ( 80 ) ... + claim [gmsb-06]: runLemma ( #getMaskShiftBits(115792089237316195423570985008687907853269984665640254554447762944319381569535) ) => doneLemma ( 48 ) ... + + claim [gmsby-01]: runLemma ( #getMaskShiftBytes(0) ) => doneLemma ( 0 ) ... + claim [gmsby-02]: runLemma ( #getMaskShiftBytes(2 ^Int 164 -Int 1) ) => doneLemma ( -1 ) ... + claim [gmsby-03]: runLemma ( #getMaskShiftBytes(pow256) ) => doneLemma ( -1 ) ... + claim [gmsby-04]: runLemma ( #getMaskShiftBytes(115341543235797707419527244145998463631733976271937281205136574426583511597055) ) => doneLemma ( 30 ) ... + claim [gmsby-05]: runLemma ( #getMaskShiftBytes(115790322390251417039241401711187164934754157181743689629425282016341011726335) ) => doneLemma ( 10 ) ... + claim [gmsby-06]: runLemma ( #getMaskShiftBytes(115792089237316195423570985008687907853269984665640254554447762944319381569535) ) => doneLemma ( 6 ) ... + + claim [gmwb-01]: runLemma ( #getMaskWidthBits(0) ) => doneLemma ( 256 ) ... + claim [gmwb-02]: runLemma ( #getMaskWidthBits(2 ^Int 164 -Int 1) ) => doneLemma ( 92 ) ... + claim [gmwb-03]: runLemma ( #getMaskWidthBits(pow256) ) => doneLemma ( -1 ) ... + claim [gmwb-04]: runLemma ( #getMaskWidthBits(115341543235797707419527244145998463631733976271937281205136574426583511597055) ) => doneLemma ( 8 ) ... + claim [gmwb-05]: runLemma ( #getMaskWidthBits(115790322390251417039241401711187164934754157181743689629425282016341011726335) ) => doneLemma ( 160 ) ... + claim [gmwb-06]: runLemma ( #getMaskWidthBits(115792089237316195423570985008687907853269984665640254554447762944319381569535) ) => doneLemma ( 40 ) ... + + claim [gmwby-01]: runLemma ( #getMaskWidthBytes(0) ) => doneLemma ( 32 ) ... + claim [gmwby-02]: runLemma ( #getMaskWidthBytes(2 ^Int 164 -Int 1) ) => doneLemma ( -1 ) ... + claim [gmwby-03]: runLemma ( #getMaskWidthBytes(pow256) ) => doneLemma ( -1 ) ... + claim [gmwby-04]: runLemma ( #getMaskWidthBytes(115341543235797707419527244145998463631733976271937281205136574426583511597055) ) => doneLemma ( 1 ) ... + claim [gmwby-05]: runLemma ( #getMaskWidthBytes(115790322390251417039241401711187164934754157181743689629425282016341011726335) ) => doneLemma ( 20 ) ... + claim [gmwby-06]: runLemma ( #getMaskWidthBytes(115792089237316195423570985008687907853269984665640254554447762944319381569535) ) => doneLemma ( 5 ) ... + + claim [is-mask-01]: runLemma( #isMask(maxUInt8 ) ) => doneLemma( true ) ... + claim [is-mask-02]: runLemma( #isMask(maxUInt40 ) ) => doneLemma( true ) ... + claim [is-mask-03]: runLemma( #isMask(115341543235797707419527244145998463631733976271937281205136574426583511597055) ) => doneLemma( true ) ... + claim [is-mask-04]: runLemma( #isMask(115790322390251417039241401711187164934754157181743689629425282016341011726335) ) => doneLemma( true ) ... + claim [is-mask-05]: runLemma( #isMask(115792089237316195423570985008687907853269984665640254554447762944319381569535) ) => doneLemma( true ) ... + claim [is-mask-06]: runLemma( #isMask(115792089237316195423570985008687907813269984665640254554447762944319381569535) ) => doneLemma( false ) ... + claim [is-mask-07]: runLemma( #isMask(115792089237316195423570985008687907853269984635640254554447762944319381569535) ) => doneLemma( false ) ... + claim [is-mask-08]: runLemma( #isMask(115792089237316195473570985008687907853269984665640254554447762944319381569535) ) => doneLemma( false ) ... + + claim [byte-shift-01]: runLemma( #isByteShift(0 ) ) => doneLemma( false ) ... + claim [byte-shift-02]: runLemma( #isByteShift(maxUInt40 ) ) => doneLemma( false ) ... + claim [byte-shift-03]: runLemma( #isByteShift(maxUInt160 ) ) => doneLemma( false ) ... + claim [byte-shift-04]: runLemma( #isByteShift(maxUInt240 ) ) => doneLemma( false ) ... + claim [byte-shift-05]: runLemma( #isByteShift(pow40 ) ) => doneLemma( true ) ... + claim [byte-shift-06]: runLemma( #isByteShift(pow160 ) ) => doneLemma( true ) ... + claim [byte-shift-07]: runLemma( #isByteShift(2 ^Int 164 ) ) => doneLemma( false ) ... + claim [byte-shift-08]: runLemma( #isByteShift(pow240 ) ) => doneLemma( true ) ... + claim [byte-shift-09]: runLemma( #isByteShift(pow256 ) ) => doneLemma( false ) ... + + // + // From real-world examples + // + + claim [slot-update-01]: + runLemma( + ( maxUInt8 &Int ( ( TIMESTAMP_CELL:Int *Int pow48 ) |Int ( 115792089237316195423570985008687907853269984665640254554447762944319381569535 &Int ( ( TIMESTAMP_CELL:Int *Int 256 ) |Int ( 115792089237316195423570985008687907853269984665640564039457583726438152929535 &Int ( 1 |Int #asWord ( b"\x00E\xc9,,\xd0\xdf{-p^\xf1,\xffw\xcb\x0b\xc5W\xed\"" +Bytes #buf ( 5 , _WORD4:Int ) +Bytes #buf ( 5 , _WORD3:Int ) +Bytes b"\x00" ) ) ) ) ) ) ) + ) => doneLemma( + 1 + ) ... + requires 0 <=Int TIMESTAMP_CELL andBool TIMESTAMP_CELL runLemma ( + ( ( maxUInt40 &Int ( ( 115341543235797707419527244145998463631733976271937281205136574426583511597055 &Int #asWord ( #buf ( 2 , WORD7:Int ) +Bytes b"\xa4\xadOh\xd0\xb9\x1c\xfd\x19h|\x88\x1eP\xf3\xa0\x02B\x82\x8c" +Bytes #buf ( 5 , TIMESTAMP_CELL:Int ) +Bytes #buf ( 5 , WORD5:Int ) ) ) /Int pow40 ) ) ) + ) => doneLemma ( + TIMESTAMP_CELL + ) ... + requires 0 <=Int TIMESTAMP_CELL andBool TIMESTAMP_CELL runLemma ( + ( maxUInt40 &Int ( ( TIMESTAMP_CELL:Int |Int ( 115792089237316195423570985008687907853269984665640564039457584006813618012160 &Int #asWord ( #buf ( 1 , WORD7:Int ) +Bytes b"\xa4\xadOh\xd0\xb9\x1c\xfd\x19h|\x88\x1eP\xf3\xa0\x02B\x82\x8c" +Bytes #buf ( 5 , WORD6:Int ) +Bytes #buf ( 5 , WORD5:Int ) ) ) ) /Int pow40 ) ) + ) => doneLemma ( + #asWord ( #buf ( 5 , WORD6:Int ) ) + ) ... + requires 0 <=Int TIMESTAMP_CELL andBool TIMESTAMP_CELL runLemma ( + #asWord ( #range ( #buf ( 10 , ( ( ( TIMESTAMP_CELL:Int *Int pow48 ) /Int 256 ) |Int TIMESTAMP_CELL:Int ) ) , 5 , 5 ) ) <=Int TIMESTAMP_CELL:Int + ) => doneLemma ( + true + ) ... + requires 0 <=Int TIMESTAMP_CELL andBool TIMESTAMP_CELL runLemma ( + #asWord ( #range ( #buf ( 6 , TIMESTAMP_CELL:Int *Int 256 ) , 5 , 1 ) ) + ) => doneLemma ( + 0 + ) ... + requires 0 <=Int TIMESTAMP_CELL andBool TIMESTAMP_CELL runLemma ( + #asWord ( #range ( #buf ( 26 , 960911443338137442927181681227604902095826437272264907948032 |Int WORD4:Int ) , 21 , 5 ) ) <=Int TIMESTAMP_CELL:Int + ) => doneLemma ( + WORD4 <=Int TIMESTAMP_CELL + ) ... + requires 0 <=Int WORD4 andBool WORD4 runLemma ( + ( 481644099385675654177479669474857658256926169505224677670350078624137216 |Int ( 115790322390251417039241401711187164934754157181743689629425282016341011726335 &Int #asWord ( #buf ( 2 , WORD7:Int ) +Bytes b"\xa4\xadOh\xd0\xb9\x1c\xfd\x19h|\x88\x1eP\xf3\xa0\x02B\x82\x8c" +Bytes #buf ( 5 , WORD6:Int ) +Bytes #buf ( 5 , WORD5:Int ) ) ) ) + ) => doneLemma ( + #asWord ( #buf ( 2 , WORD7:Int ) +Bytes b"E\xc9,,\xd0\xdf{-p^\xf1,\xffw\xcb\x0b\xc5W\xed\"" +Bytes #buf ( 5 , WORD6:Int ) +Bytes #buf ( 5 , WORD5:Int ) ) + ) ... + requires 0 <=Int WORD5 andBool WORD5 #parseByteStack("0x608060405234801561001057600080fd5b5060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600a819055506134b58061006c6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637cdd3fde116100f9578063bb35783b11610097578063dc4d20fa11610071578063dc4d20fa1461096c578063f059212a146109b0578063f24e23eb14610a08578063f37ac61c14610a76576101c4565b8063bb35783b14610848578063bf353dbb146108b6578063d9638d361461090e576101c4565b80639c52a7f1116100d35780639c52a7f11461074a578063a3b22fc41461078e578063b65337df146107d2578063babe8a3f1461082a576101c4565b80637cdd3fde14610652578063870c616d146106aa578063957aa58c1461072c576101c4565b80634538c4eb11610166578063692450091161014057806369245009146104ac5780636c25b346146104b6578063760887031461050e5780637bab3f40146105b0576101c4565b80634538c4eb146103785780636111be2e146103f057806365fae35e14610468576101c4565b80632424be5c116101a25780632424be5c1461028b57806329ae8114146102f45780632d61a3551461032c5780633b6631951461034a576101c4565b80630dca59c1146101c95780631a0b287e146101e7578063214414d514610229575b600080fd5b6101d1610aa4565b6040518082815260200191505060405180910390f35b610227600480360360608110156101fd57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610aaa565b005b6102756004803603604081101561023f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d58565b6040518082815260200191505060405180910390f35b6102d7600480360360408110156102a157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d7d565b604051808381526020018281526020019250505060405180910390f35b61032a6004803603604081101561030a57600080fd5b810190808035906020019092919080359060200190929190505050610dae565b005b610334610fb5565b6040518082815260200191505060405180910390f35b6103766004803603602081101561036057600080fd5b8101908080359060200190929190505050610fbb565b005b6103da6004803603604081101561038e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061115a565b6040518082815260200191505060405180910390f35b6104666004803603608081101561040657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061117f565b005b6104aa6004803603602081101561047e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611392565b005b6104b461153a565b005b6104f8600480360360208110156104cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061162d565b6040518082815260200191505060405180910390f35b6105ae600480360360c081101561052457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611645565b005b610650600480360360c08110156105c657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611e31565b005b6106a86004803603606081101561066857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612130565b005b61072a600480360360a08110156106c057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506122cc565b005b610734612700565b6040518082815260200191505060405180910390f35b61078c6004803603602081101561076057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612706565b005b6107d0600480360360208110156107a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ae565b005b610828600480360360608110156107e857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612967565b005b610832612bac565b6040518082815260200191505060405180910390f35b6108b46004803603606081101561085e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612bb2565b005b6108f8600480360360208110156108cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d80565b6040518082815260200191505060405180910390f35b61093a6004803603602081101561092457600080fd5b8101908080359060200190929190505050612d98565b604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b6109ae6004803603602081101561098257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612dce565b005b6109f2600480360360208110156109c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e88565b6040518082815260200191505060405180910390f35b610a7460048036036060811015610a1e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ea0565b005b610aa260048036036020811015610a8c57600080fd5b81019080803590602001909291905050506130ca565b005b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414610bd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f73706f7400000000000000000000000000000000000000000000000000000000821415610c1e57806002600085815260200190815260200160002060020181905550610d1e565b7f6c696e6500000000000000000000000000000000000000000000000000000000821415610c6657806002600085815260200190815260200160002060030181905550610d1d565b7f6475737400000000000000000000000000000000000000000000000000000000821415610cae57806002600085815260200190815260200160002060040181905550610d1c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5661742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5b5961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b6004602052816000526040600020602052806000526040600020600091509150505481565b6003602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414610eda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f4c696e6500000000000000000000000000000000000000000000000000000000821415610f0e5780600981905550610f7c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5661742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a4505050565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461106f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006002600083815260200190815260200160002060010154146110fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5661742f696c6b2d616c72656164792d696e697400000000000000000000000081525060200191505060405180910390fd5b6b033b2e3c9fd0803ce800000060026000838152602001908152602001600020600101819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b6001602052816000526040600020602052806000526040600020600091509150505481565b6111898333613244565b6111fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5661742f6e6f742d616c6c6f776564000000000000000000000000000000000081525060200191505060405180910390fd5b6112556004600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613304565b6004600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113036004600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b6004600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611446576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a54146114be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6000600a819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450565b60056020528060005260406000206000915090505481565b6001600a54146116bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6116c5613437565b6003600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201548152602001600182015481525050905061173e613451565b600260008981526020019081526020016000206040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060008160200151141561180b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5661742f696c6b2d6e6f742d696e69740000000000000000000000000000000081525060200191505060405180910390fd5b611819826000015185613338565b826000018181525050611830826020015184613338565b826020018181525050611847816000015184613338565b8160000181815250506000611860826020015185613377565b90506000611876836020015185602001516133b2565b905061188460075483613338565b6007819055506118c060008613156118bb85606001516118ac876000015188602001516133b2565b111560095460075411156133de565b6133eb565b611932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5661742f6365696c696e672d657863656564656400000000000000000000000081525060200191505060405180910390fd5b611961611947600087131560008912156133de565b611959866000015186604001516133b2565b8311156133eb565b6119d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d73616665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6119f76119e8600087131560008912156133de565b6119f28b33613244565b6133eb565b611a69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5661742f6e6f742d616c6c6f7765642d7500000000000000000000000000000081525060200191505060405180910390fd5b611a806000871315611a7b8a33613244565b6133eb565b611af2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5661742f6e6f742d616c6c6f7765642d7600000000000000000000000000000081525060200191505060405180910390fd5b611b096000861215611b048933613244565b6133eb565b611b7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5661742f6e6f742d616c6c6f7765642d7700000000000000000000000000000081525060200191505060405180910390fd5b611b93600085602001511484608001518310156133eb565b611c05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f5661742f6475737400000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611c5f600460008c815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054876133f8565b600460008c815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611cfc600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613338565b600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600360008c815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015590505082600260008c81526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155905050505050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ee5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006003600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600260008981526020019081526020016000209050611f5e826000015485613338565b8260000181905550611f74826001015484613338565b8260010181905550611f8a816000015484613338565b81600001819055506000611fa2826001015485613377565b9050611ffe600460008b815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866133f8565b600460008b815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061209b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826133f8565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120ea600854826133f8565b6008819055505050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b61223e6004600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613338565b6004600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b60006003600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006003600088815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006002600089815260200190815260200160002090506123998360000154866133f8565b83600001819055506123af8360010154856133f8565b83600101819055506123c5826000015486613338565b82600001819055506123db826001015485613338565b826001018190555060006123f7846001015483600101546133b2565b9050600061240d846001015484600101546133b2565b905061242b61241c8a33613244565b6124268a33613244565b6133de565b61249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5661742f6e6f742d616c6c6f776564000000000000000000000000000000000081525060200191505060405180910390fd5b6124af856000015484600201546133b2565b821115612524576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5661742f6e6f742d736166652d7372630000000000000000000000000000000081525060200191505060405180910390fd5b612536846000015484600201546133b2565b8111156125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5661742f6e6f742d736166652d6473740000000000000000000000000000000081525060200191505060405180910390fd5b6125c3836004015483101560008760010154146133eb565b612635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f647573742d737263000000000000000000000000000000000000000081525060200191505060405180910390fd5b61264d836004015482101560008660010154146133eb565b6126bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f647573742d647374000000000000000000000000000000000000000081525060200191505060405180910390fd5b50505050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a4505050505050565b600a5481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146127ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612a1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414612a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600260008581526020019081526020016000209050612ab8816001015483613338565b81600101819055506000612ad0826000015484613377565b9050612b1b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613338565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b6a60075482613338565b60078190555050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b60095481565b612bbc8333613244565b612c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5661742f6e6f742d616c6c6f776564000000000000000000000000000000000081525060200191505060405180910390fd5b612c77600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613304565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d03600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b60006020528060005260406000206000915090505481565b60026020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154905085565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60066020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612f54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b612f9d600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613029600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130786008548261331e565b60088190555061308a6007548261331e565b6007819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b6000339050613118600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613304565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131a4600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613304565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131f360085483613304565b60088190555061320560075483613304565b600781905550505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60006132fc8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161460018060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146133eb565b905092915050565b600082828403915081111561331857600080fd5b92915050565b600082828401915081101561333257600080fd5b92915050565b6000818301905060008212158061334f5750828111155b61335857600080fd5b6000821315806133685750828110155b61337157600080fd5b92915050565b60008183029050600083121561338c57600080fd5b60008214806133a35750828282816133a057fe5b05145b6133ac57600080fd5b92915050565b6000808214806133cf57508282838502925082816133cc57fe5b04145b6133d857600080fd5b92915050565b6000818316905092915050565b6000818317905092915050565b6000818303905060008213158061340f5750828111155b61341857600080fd5b6000821215806134285750828110155b61343157600080fd5b92915050565b604051806040016040528060008152602001600081525090565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509056fea265627a7a723158208a580a94b7f47ff0368768e9eb5ecda769fe0c72f37dcc78574c670dc0671a9664736f6c634300050c0032") + + syntax Bytes ::= "Vat_bin_runtime" [macro] + // ------------------------------------------ + rule Vat_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80637cdd3fde116100f9578063bb35783b11610097578063dc4d20fa11610071578063dc4d20fa1461096c578063f059212a146109b0578063f24e23eb14610a08578063f37ac61c14610a76576101c4565b8063bb35783b14610848578063bf353dbb146108b6578063d9638d361461090e576101c4565b80639c52a7f1116100d35780639c52a7f11461074a578063a3b22fc41461078e578063b65337df146107d2578063babe8a3f1461082a576101c4565b80637cdd3fde14610652578063870c616d146106aa578063957aa58c1461072c576101c4565b80634538c4eb11610166578063692450091161014057806369245009146104ac5780636c25b346146104b6578063760887031461050e5780637bab3f40146105b0576101c4565b80634538c4eb146103785780636111be2e146103f057806365fae35e14610468576101c4565b80632424be5c116101a25780632424be5c1461028b57806329ae8114146102f45780632d61a3551461032c5780633b6631951461034a576101c4565b80630dca59c1146101c95780631a0b287e146101e7578063214414d514610229575b600080fd5b6101d1610aa4565b6040518082815260200191505060405180910390f35b610227600480360360608110156101fd57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610aaa565b005b6102756004803603604081101561023f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d58565b6040518082815260200191505060405180910390f35b6102d7600480360360408110156102a157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d7d565b604051808381526020018281526020019250505060405180910390f35b61032a6004803603604081101561030a57600080fd5b810190808035906020019092919080359060200190929190505050610dae565b005b610334610fb5565b6040518082815260200191505060405180910390f35b6103766004803603602081101561036057600080fd5b8101908080359060200190929190505050610fbb565b005b6103da6004803603604081101561038e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061115a565b6040518082815260200191505060405180910390f35b6104666004803603608081101561040657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061117f565b005b6104aa6004803603602081101561047e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611392565b005b6104b461153a565b005b6104f8600480360360208110156104cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061162d565b6040518082815260200191505060405180910390f35b6105ae600480360360c081101561052457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611645565b005b610650600480360360c08110156105c657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611e31565b005b6106a86004803603606081101561066857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612130565b005b61072a600480360360a08110156106c057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506122cc565b005b610734612700565b6040518082815260200191505060405180910390f35b61078c6004803603602081101561076057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612706565b005b6107d0600480360360208110156107a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ae565b005b610828600480360360608110156107e857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612967565b005b610832612bac565b6040518082815260200191505060405180910390f35b6108b46004803603606081101561085e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612bb2565b005b6108f8600480360360208110156108cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d80565b6040518082815260200191505060405180910390f35b61093a6004803603602081101561092457600080fd5b8101908080359060200190929190505050612d98565b604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b6109ae6004803603602081101561098257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612dce565b005b6109f2600480360360208110156109c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e88565b6040518082815260200191505060405180910390f35b610a7460048036036060811015610a1e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ea0565b005b610aa260048036036020811015610a8c57600080fd5b81019080803590602001909291905050506130ca565b005b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414610bd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f73706f7400000000000000000000000000000000000000000000000000000000821415610c1e57806002600085815260200190815260200160002060020181905550610d1e565b7f6c696e6500000000000000000000000000000000000000000000000000000000821415610c6657806002600085815260200190815260200160002060030181905550610d1d565b7f6475737400000000000000000000000000000000000000000000000000000000821415610cae57806002600085815260200190815260200160002060040181905550610d1c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5661742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5b5961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b6004602052816000526040600020602052806000526040600020600091509150505481565b6003602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414610eda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f4c696e6500000000000000000000000000000000000000000000000000000000821415610f0e5780600981905550610f7c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5661742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a4505050565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461106f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006002600083815260200190815260200160002060010154146110fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5661742f696c6b2d616c72656164792d696e697400000000000000000000000081525060200191505060405180910390fd5b6b033b2e3c9fd0803ce800000060026000838152602001908152602001600020600101819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b6001602052816000526040600020602052806000526040600020600091509150505481565b6111898333613244565b6111fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5661742f6e6f742d616c6c6f776564000000000000000000000000000000000081525060200191505060405180910390fd5b6112556004600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613304565b6004600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113036004600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b6004600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611446576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a54146114be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6000600a819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450565b60056020528060005260406000206000915090505481565b6001600a54146116bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6116c5613437565b6003600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201548152602001600182015481525050905061173e613451565b600260008981526020019081526020016000206040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060008160200151141561180b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5661742f696c6b2d6e6f742d696e69740000000000000000000000000000000081525060200191505060405180910390fd5b611819826000015185613338565b826000018181525050611830826020015184613338565b826020018181525050611847816000015184613338565b8160000181815250506000611860826020015185613377565b90506000611876836020015185602001516133b2565b905061188460075483613338565b6007819055506118c060008613156118bb85606001516118ac876000015188602001516133b2565b111560095460075411156133de565b6133eb565b611932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5661742f6365696c696e672d657863656564656400000000000000000000000081525060200191505060405180910390fd5b611961611947600087131560008912156133de565b611959866000015186604001516133b2565b8311156133eb565b6119d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d73616665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6119f76119e8600087131560008912156133de565b6119f28b33613244565b6133eb565b611a69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5661742f6e6f742d616c6c6f7765642d7500000000000000000000000000000081525060200191505060405180910390fd5b611a806000871315611a7b8a33613244565b6133eb565b611af2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5661742f6e6f742d616c6c6f7765642d7600000000000000000000000000000081525060200191505060405180910390fd5b611b096000861215611b048933613244565b6133eb565b611b7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5661742f6e6f742d616c6c6f7765642d7700000000000000000000000000000081525060200191505060405180910390fd5b611b93600085602001511484608001518310156133eb565b611c05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f5661742f6475737400000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611c5f600460008c815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054876133f8565b600460008c815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611cfc600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613338565b600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600360008c815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015590505082600260008c81526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155905050505050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ee5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006003600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600260008981526020019081526020016000209050611f5e826000015485613338565b8260000181905550611f74826001015484613338565b8260010181905550611f8a816000015484613338565b81600001819055506000611fa2826001015485613377565b9050611ffe600460008b815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866133f8565b600460008b815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061209b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826133f8565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120ea600854826133f8565b6008819055505050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b61223e6004600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613338565b6004600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b60006003600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006003600088815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006002600089815260200190815260200160002090506123998360000154866133f8565b83600001819055506123af8360010154856133f8565b83600101819055506123c5826000015486613338565b82600001819055506123db826001015485613338565b826001018190555060006123f7846001015483600101546133b2565b9050600061240d846001015484600101546133b2565b905061242b61241c8a33613244565b6124268a33613244565b6133de565b61249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5661742f6e6f742d616c6c6f776564000000000000000000000000000000000081525060200191505060405180910390fd5b6124af856000015484600201546133b2565b821115612524576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5661742f6e6f742d736166652d7372630000000000000000000000000000000081525060200191505060405180910390fd5b612536846000015484600201546133b2565b8111156125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5661742f6e6f742d736166652d6473740000000000000000000000000000000081525060200191505060405180910390fd5b6125c3836004015483101560008760010154146133eb565b612635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f647573742d737263000000000000000000000000000000000000000081525060200191505060405180910390fd5b61264d836004015482101560008660010154146133eb565b6126bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f647573742d647374000000000000000000000000000000000000000081525060200191505060405180910390fd5b50505050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a4505050505050565b600a5481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146127ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612a1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600a5414612a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5661742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600260008581526020019081526020016000209050612ab8816001015483613338565b81600101819055506000612ad0826000015484613377565b9050612b1b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613338565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b6a60075482613338565b60078190555050505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b60095481565b612bbc8333613244565b612c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5661742f6e6f742d616c6c6f776564000000000000000000000000000000000081525060200191505060405180910390fd5b612c77600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613304565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d03600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b60006020528060005260406000206000915090505481565b60026020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154905085565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60066020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612f54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5661742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b612f9d600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613029600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261331e565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130786008548261331e565b60088190555061308a6007548261331e565b6007819055505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a450505050565b6000339050613118600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613304565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131a4600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613304565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131f360085483613304565b60088190555061320560075483613304565b600781905550505961012081016040526020815260e0602082015260e06000604083013760443560243560043560003560e01c60e01b61012085a45050565b60006132fc8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161460018060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146133eb565b905092915050565b600082828403915081111561331857600080fd5b92915050565b600082828401915081101561333257600080fd5b92915050565b6000818301905060008212158061334f5750828111155b61335857600080fd5b6000821315806133685750828110155b61337157600080fd5b92915050565b60008183029050600083121561338c57600080fd5b60008214806133a35750828282816133a057fe5b05145b6133ac57600080fd5b92915050565b6000808214806133cf57508282838502925082816133cc57fe5b04145b6133d857600080fd5b92915050565b6000818316905092915050565b6000818317905092915050565b6000818303905060008213158061340f5750828111155b61341857600080fd5b6000821215806134285750828110155b61343157600080fd5b92915050565b604051806040016040528060008152602001600081525090565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509056fea265627a7a723158208a580a94b7f47ff0368768e9eb5ecda769fe0c72f37dcc78574c670dc0671a9664736f6c634300050c0032") + + syntax Bytes ::= "Vow_bin" [macro] + // ---------------------------------- + rule Vow_bin => #parseByteStack("0x608060405234801561001057600080fd5b506040516128e63803806128e68339818101604052606081101561003357600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561020057600080fd5b505af1158015610214573d6000803e3d6000fd5b505050506001600c819055505050506126b4806102326000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063697efb78116100c3578063cb5cc1091161007c578063cb5cc109146104a9578063d0adc35f146104eb578063d4e8be8314610509578063d7ee674b14610557578063e433054514610585578063f37ac61c146105a357610158565b8063697efb7814610385578063957aa58c146103b35780639c52a7f1146103d1578063bbbb0d7b14610415578063bf353dbb14610433578063c349d3621461048b57610158565b80634081d73a116101155780634081d73a146102675780635ca0d723146102b157806364bd7013146102fb57806365fae35e1461031957806368110b2f1461035d578063692450091461037b57610158565b80630e01198b1461015d5780631b8e8cfa1461017b5780632506855a1461019957806329ae8114146101c75780632a1d2b3c146101ff57806336569e771461021d575b600080fd5b6101656105d1565b6040518082815260200191505060405180910390f35b610183610a69565b6040518082815260200191505060405180910390f35b6101c5600480360360208110156101af57600080fd5b8101908080359060200190929190505050610a6f565b005b6101fd600480360360408110156101dd57600080fd5b810190808035906020019092919080359060200190929190505050610d0b565b005b610207610f6c565b6040518082815260200191505060405180910390f35b610225610f72565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61026f610f98565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102b9610fbe565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610303610fe4565b6040518082815260200191505060405180910390f35b61035b6004803603602081101561032f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fea565b005b610365611190565b6040518082815260200191505060405180910390f35b610383611196565b005b6103b16004803603602081101561039b57600080fd5b8101908080359060200190929190505050611761565b005b6103bb611891565b6040518082815260200191505060405180910390f35b610413600480360360208110156103e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611897565b005b61041d6119c5565b6040518082815260200191505060405180910390f35b6104756004803603602081101561044957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611db9565b6040518082815260200191505060405180910390f35b610493611dd1565b6040518082815260200191505060405180910390f35b6104d5600480360360208110156104bf57600080fd5b8101908080359060200190929190505050611dd7565b6040518082815260200191505060405180910390f35b6104f3611def565b6040518082815260200191505060405180910390f35b6105556004803603604081101561051f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611df5565b005b6105836004803603602081101561056d57600080fd5b81019080803590602001909291905050506121bf565b005b61058d6122b4565b6040518082815260200191505060405180910390f35b6105cf600480360360208110156105b957600080fd5b81019080803590602001909291905050506122ba565b005b60006106c36106bb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561067857600080fd5b505afa15801561068c573d6000803e3d6000fd5b505050506040513d60208110156106a257600080fd5b8101908080519060200190929190505050600a54612631565b600b54612631565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561076257600080fd5b505afa158015610776573d6000803e3d6000fd5b505050506040513d602081101561078c57600080fd5b81019080805190602001909291905050501015610811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f566f772f696e73756666696369656e742d737572706c7573000000000000000081525060200191505060405180910390fd5b60006109036108fb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156108b857600080fd5b505afa1580156108cc573d6000803e3d6000fd5b505050506040513d60208110156108e257600080fd5b810190808051906020019092919050505060055461264b565b60065461264b565b14610976576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f566f772f646562742d6e6f742d7a65726f00000000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca40c419600a5460006040518363ffffffff1660e01b81526004018083815260200182815260200192505050602060405180830381600087803b1580156109f657600080fd5b505af1158015610a0a573d6000803e3d6000fd5b505050506040513d6020811015610a2057600080fd5b810190808051906020019092919050505090505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45090565b600b5481565b600654811115610ae7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d656e6f7567682d617368000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b8657600080fd5b505afa158015610b9a573d6000803e3d6000fd5b505050506040513d6020811015610bb057600080fd5b8101908080519060200190929190505050811115610c36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f566f772f696e73756666696369656e742d737572706c7573000000000000000081525060200191505060405180910390fd5b610c426006548261264b565b600681905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f37ac61c826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610cbd57600080fd5b505af1158015610cd1573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610dbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f7761697400000000000000000000000000000000000000000000000000000000821415610df35780600781905550610f35565b7f62756d7000000000000000000000000000000000000000000000000000000000821415610e275780600a81905550610f34565b7f73756d7000000000000000000000000000000000000000000000000000000000821415610e5b5780600981905550610f33565b7f64756d7000000000000000000000000000000000000000000000000000000000821415610e8f5780600881905550610f32565b7f68756d7000000000000000000000000000000000000000000000000000000000821415610ec35780600b81905550610f31565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f566f772f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461109e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600c5414611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f566f772f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600a5481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461124a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600c54146112c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f566f772f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600c8190555060006005819055506000600681905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2f91af2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156113d957600080fd5b505afa1580156113ed573d6000803e3d6000fd5b505050506040513d602081101561140357600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561144a57600080fd5b505af115801561145e573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156114cc57600080fd5b505af11580156114e0573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f37ac61c6116de600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156115c457600080fd5b505afa1580156115d8573d6000803e3d6000fd5b505050506040513d60208110156115ee57600080fd5b8101908080519060200190929190505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b8101908080519060200190929190505050612665565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561171457600080fd5b505af1158015611728573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611815576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b611832600460004281526020019081526020016000205482612631565b600460004281526020019081526020016000208190555061185560055482612631565b6005819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600c5481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461194b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6000611ab7611aaf600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a6c57600080fd5b505afa158015611a80573d6000803e3d6000fd5b505050506040513d6020811015611a9657600080fd5b810190808051906020019092919050505060055461264b565b60065461264b565b6009541115611b2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f566f772f696e73756666696369656e742d64656274000000000000000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bcf57600080fd5b505afa158015611be3573d6000803e3d6000fd5b505050506040513d6020811015611bf957600080fd5b810190808051906020019092919050505014611c7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f566f772f737572706c75732d6e6f742d7a65726f00000000000000000000000081525060200191505060405180910390fd5b611c8b600654600954612631565b600681905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7e9cd24306008546009546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050602060405180830381600087803b158015611d4657600080fd5b505af1158015611d5a573d6000803e3d6000fd5b505050506040513d6020811015611d7057600080fd5b810190808051906020019092919050505090505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45090565b60006020528060005260406000206000915090505481565b60095481565b60046020528060005260406000206000915090505481565b60055481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ea9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f666c6170706572000000000000000000000000000000000000000000000000008214156120ab57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc4d20fa600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015611f9457600080fd5b505af1158015611fa8573d6000803e3d6000fd5b5050505080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561208e57600080fd5b505af11580156120a2573d6000803e3d6000fd5b50505050612188565b7f666c6f70706572000000000000000000000000000000000000000000000000008214156121195780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612187565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f566f772f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b426121cc82600754612631565b1115612240576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f566f772f776169742d6e6f742d66696e6973686564000000000000000000000081525060200191505060405180910390fd5b61225f600554600460008481526020019081526020016000205461264b565b600581905550600060046000838152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60085481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561235957600080fd5b505afa15801561236d573d6000803e3d6000fd5b505050506040513d602081101561238357600080fd5b8101908080519060200190929190505050811115612409576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f566f772f696e73756666696369656e742d737572706c7573000000000000000081525060200191505060405180910390fd5b6124f96124f1600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156124ae57600080fd5b505afa1580156124c2573d6000803e3d6000fd5b505050506040513d60208110156124d857600080fd5b810190808051906020019092919050505060055461264b565b60065461264b565b81111561256e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f566f772f696e73756666696369656e742d64656274000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f37ac61c826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156125e357600080fd5b505af11580156125f7573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600082828401915081101561264557600080fd5b92915050565b600082828403915081111561265f57600080fd5b92915050565b6000818311156126755781612677565b825b90509291505056fea265627a7a72315820c366742f39bbcf961239d704f4653337b9e0b1b5b9ce284e9e27a346452a7a9964736f6c634300050c0032") + + syntax Bytes ::= "Vow_bin_runtime" [macro] + // ------------------------------------------ + rule Vow_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063697efb78116100c3578063cb5cc1091161007c578063cb5cc109146104a9578063d0adc35f146104eb578063d4e8be8314610509578063d7ee674b14610557578063e433054514610585578063f37ac61c146105a357610158565b8063697efb7814610385578063957aa58c146103b35780639c52a7f1146103d1578063bbbb0d7b14610415578063bf353dbb14610433578063c349d3621461048b57610158565b80634081d73a116101155780634081d73a146102675780635ca0d723146102b157806364bd7013146102fb57806365fae35e1461031957806368110b2f1461035d578063692450091461037b57610158565b80630e01198b1461015d5780631b8e8cfa1461017b5780632506855a1461019957806329ae8114146101c75780632a1d2b3c146101ff57806336569e771461021d575b600080fd5b6101656105d1565b6040518082815260200191505060405180910390f35b610183610a69565b6040518082815260200191505060405180910390f35b6101c5600480360360208110156101af57600080fd5b8101908080359060200190929190505050610a6f565b005b6101fd600480360360408110156101dd57600080fd5b810190808035906020019092919080359060200190929190505050610d0b565b005b610207610f6c565b6040518082815260200191505060405180910390f35b610225610f72565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61026f610f98565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102b9610fbe565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610303610fe4565b6040518082815260200191505060405180910390f35b61035b6004803603602081101561032f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fea565b005b610365611190565b6040518082815260200191505060405180910390f35b610383611196565b005b6103b16004803603602081101561039b57600080fd5b8101908080359060200190929190505050611761565b005b6103bb611891565b6040518082815260200191505060405180910390f35b610413600480360360208110156103e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611897565b005b61041d6119c5565b6040518082815260200191505060405180910390f35b6104756004803603602081101561044957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611db9565b6040518082815260200191505060405180910390f35b610493611dd1565b6040518082815260200191505060405180910390f35b6104d5600480360360208110156104bf57600080fd5b8101908080359060200190929190505050611dd7565b6040518082815260200191505060405180910390f35b6104f3611def565b6040518082815260200191505060405180910390f35b6105556004803603604081101561051f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611df5565b005b6105836004803603602081101561056d57600080fd5b81019080803590602001909291905050506121bf565b005b61058d6122b4565b6040518082815260200191505060405180910390f35b6105cf600480360360208110156105b957600080fd5b81019080803590602001909291905050506122ba565b005b60006106c36106bb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561067857600080fd5b505afa15801561068c573d6000803e3d6000fd5b505050506040513d60208110156106a257600080fd5b8101908080519060200190929190505050600a54612631565b600b54612631565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561076257600080fd5b505afa158015610776573d6000803e3d6000fd5b505050506040513d602081101561078c57600080fd5b81019080805190602001909291905050501015610811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f566f772f696e73756666696369656e742d737572706c7573000000000000000081525060200191505060405180910390fd5b60006109036108fb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156108b857600080fd5b505afa1580156108cc573d6000803e3d6000fd5b505050506040513d60208110156108e257600080fd5b810190808051906020019092919050505060055461264b565b60065461264b565b14610976576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f566f772f646562742d6e6f742d7a65726f00000000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca40c419600a5460006040518363ffffffff1660e01b81526004018083815260200182815260200192505050602060405180830381600087803b1580156109f657600080fd5b505af1158015610a0a573d6000803e3d6000fd5b505050506040513d6020811015610a2057600080fd5b810190808051906020019092919050505090505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45090565b600b5481565b600654811115610ae7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d656e6f7567682d617368000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b8657600080fd5b505afa158015610b9a573d6000803e3d6000fd5b505050506040513d6020811015610bb057600080fd5b8101908080519060200190929190505050811115610c36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f566f772f696e73756666696369656e742d737572706c7573000000000000000081525060200191505060405180910390fd5b610c426006548261264b565b600681905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f37ac61c826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610cbd57600080fd5b505af1158015610cd1573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610dbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f7761697400000000000000000000000000000000000000000000000000000000821415610df35780600781905550610f35565b7f62756d7000000000000000000000000000000000000000000000000000000000821415610e275780600a81905550610f34565b7f73756d7000000000000000000000000000000000000000000000000000000000821415610e5b5780600981905550610f33565b7f64756d7000000000000000000000000000000000000000000000000000000000821415610e8f5780600881905550610f32565b7f68756d7000000000000000000000000000000000000000000000000000000000821415610ec35780600b81905550610f31565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f566f772f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461109e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600c5414611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f566f772f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600a5481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461124a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600c54146112c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f566f772f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600c8190555060006005819055506000600681905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2f91af2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156113d957600080fd5b505afa1580156113ed573d6000803e3d6000fd5b505050506040513d602081101561140357600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561144a57600080fd5b505af115801561145e573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156114cc57600080fd5b505af11580156114e0573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f37ac61c6116de600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156115c457600080fd5b505afa1580156115d8573d6000803e3d6000fd5b505050506040513d60208110156115ee57600080fd5b8101908080519060200190929190505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b8101908080519060200190929190505050612665565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561171457600080fd5b505af1158015611728573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611815576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b611832600460004281526020019081526020016000205482612631565b600460004281526020019081526020016000208190555061185560055482612631565b6005819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600c5481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461194b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6000611ab7611aaf600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a6c57600080fd5b505afa158015611a80573d6000803e3d6000fd5b505050506040513d6020811015611a9657600080fd5b810190808051906020019092919050505060055461264b565b60065461264b565b6009541115611b2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f566f772f696e73756666696369656e742d64656274000000000000000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bcf57600080fd5b505afa158015611be3573d6000803e3d6000fd5b505050506040513d6020811015611bf957600080fd5b810190808051906020019092919050505014611c7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f566f772f737572706c75732d6e6f742d7a65726f00000000000000000000000081525060200191505060405180910390fd5b611c8b600654600954612631565b600681905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7e9cd24306008546009546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050602060405180830381600087803b158015611d4657600080fd5b505af1158015611d5a573d6000803e3d6000fd5b505050506040513d6020811015611d7057600080fd5b810190808051906020019092919050505090505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45090565b60006020528060005260406000206000915090505481565b60095481565b60046020528060005260406000206000915090505481565b60055481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ea9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f566f772f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f666c6170706572000000000000000000000000000000000000000000000000008214156120ab57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc4d20fa600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015611f9457600080fd5b505af1158015611fa8573d6000803e3d6000fd5b5050505080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561208e57600080fd5b505af11580156120a2573d6000803e3d6000fd5b50505050612188565b7f666c6f70706572000000000000000000000000000000000000000000000000008214156121195780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612187565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f566f772f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b426121cc82600754612631565b1115612240576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f566f772f776169742d6e6f742d66696e6973686564000000000000000000000081525060200191505060405180910390fd5b61225f600554600460008481526020019081526020016000205461264b565b600581905550600060046000838152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60085481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561235957600080fd5b505afa15801561236d573d6000803e3d6000fd5b505050506040513d602081101561238357600080fd5b8101908080519060200190929190505050811115612409576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f566f772f696e73756666696369656e742d737572706c7573000000000000000081525060200191505060405180910390fd5b6124f96124f1600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f059212a306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156124ae57600080fd5b505afa1580156124c2573d6000803e3d6000fd5b505050506040513d60208110156124d857600080fd5b810190808051906020019092919050505060055461264b565b60065461264b565b81111561256e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f566f772f696e73756666696369656e742d64656274000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f37ac61c826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156125e357600080fd5b505af11580156125f7573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600082828401915081101561264557600080fd5b92915050565b600082828403915081111561265f57600080fd5b92915050565b6000818311156126755781612677565b825b90509291505056fea265627a7a72315820c366742f39bbcf961239d704f4653337b9e0b1b5b9ce284e9e27a346452a7a9964736f6c634300050c0032") + + syntax Bytes ::= "Dai_bin" [macro] + // ---------------------------------- + rule Dai_bin => #parseByteStack("0x608060405234801561001057600080fd5b506040516120d33803806120d38339818101604052602081101561003357600080fd5b810190808051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550604051808061208160529139605201905060405180910390206040518060400160405280600e81526020017f44616920537461626c65636f696e000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001955050505050506040516020818303038152906040528051906020012060058190555050611ee0806101a16000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80637ecebe00116100b8578063a9059cbb1161007c578063a9059cbb146106b4578063b753a98c1461071a578063bb35783b14610768578063bf353dbb146107d6578063dd62ed3e1461082e578063f2d5d56b146108a657610142565b80637ecebe00146104a15780638fcbaf0c146104f957806395d89b411461059f5780639c52a7f1146106225780639dc29fac1461066657610142565b8063313ce5671161010a578063313ce567146102f25780633644e5151461031657806340c10f191461033457806354fd4d501461038257806365fae35e1461040557806370a082311461044957610142565b806306fdde0314610147578063095ea7b3146101ca57806318160ddd1461023057806323b872dd1461024e57806330adf81f146102d4575b600080fd5b61014f6108f4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561018f578082015181840152602081019050610174565b50505050905090810190601f1680156101bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610216600480360360408110156101e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061092d565b604051808215151515815260200191505060405180910390f35b610238610a1f565b6040518082815260200191505060405180910390f35b6102ba6004803603606081101561026457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a25565b604051808215151515815260200191505060405180910390f35b6102dc610f3a565b6040518082815260200191505060405180910390f35b6102fa610f61565b604051808260ff1660ff16815260200191505060405180910390f35b61031e610f66565b6040518082815260200191505060405180910390f35b6103806004803603604081101561034a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f6c565b005b61038a611128565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103ca5780820151818401526020810190506103af565b50505050905090810190601f1680156103f75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104476004803603602081101561041b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611161565b005b61048b6004803603602081101561045f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061128f565b6040518082815260200191505060405180910390f35b6104e3600480360360208110156104b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112a7565b6040518082815260200191505060405180910390f35b61059d600480360361010081101561051057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803515159060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506112bf565b005b6105a76117fa565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105e75780820151818401526020810190506105cc565b50505050905090810190601f1680156106145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106646004803603602081101561063857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611833565b005b6106b26004803603604081101561067c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611961565b005b610700600480360360408110156106ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611df4565b604051808215151515815260200191505060405180910390f35b6107666004803603604081101561073057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e09565b005b6107d46004803603606081101561077e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e19565b005b610818600480360360208110156107ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e2a565b6040518082815260200191505060405180910390f35b6108906004803603604081101561084457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e42565b6040518082815260200191505060405180910390f35b6108f2600480360360408110156108bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e67565b005b6040518060400160405280600e81526020017f44616920537461626c65636f696e00000000000000000000000000000000000081525081565b600081600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60015481565b600081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610adc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4461692f696e73756666696369656e742d62616c616e6365000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610bb457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15610db25781600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4461692f696e73756666696369656e742d616c6c6f77616e636500000000000081525060200191505060405180910390fd5b610d31600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611e77565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610dfb600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611e77565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e87600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611e91565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb60001b81565b601281565b60055481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b611069600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611e91565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110b860015482611e91565b6001819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611215576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60026020528060005260406000206000915090505481565b60046020528060005260406000206000915090505481565b60006005547fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb60001b8a8a8a8a8a604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018215151515815260200196505050505050506040516020818303038152906040528051906020012060405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16141561148c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4461692f696e76616c69642d616464726573732d30000000000000000000000081525060200191505060405180910390fd5b60018185858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156114e9573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614611593576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f696e76616c69642d7065726d6974000000000000000000000000000081525060200191505060405180910390fd5b60008614806115a25750854211155b611614576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f7065726d69742d65787069726564000000000000000000000000000081525060200191505060405180910390fd5b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505587146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4461692f696e76616c69642d6e6f6e636500000000000000000000000000000081525060200191505060405180910390fd5b6000856116e4576000611706565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b905080600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050505050505050565b6040518060400160405280600381526020017f444149000000000000000000000000000000000000000000000000000000000081525081565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611a16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4461692f696e73756666696369656e742d62616c616e6365000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611aee57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15611cec5780600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611be5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4461692f696e73756666696369656e742d616c6c6f77616e636500000000000081525060200191505060405180910390fd5b611c6b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611e77565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611d35600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611e77565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d8460015482611e77565b600181905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000611e01338484610a25565b905092915050565b611e14338383610a25565b505050565b611e24838383610a25565b50505050565b60006020528060005260406000206000915090505481565b6003602052816000526040600020602052806000526040600020600091509150505481565b611e72823383610a25565b505050565b6000828284039150811115611e8b57600080fd5b92915050565b6000828284019150811015611ea557600080fd5b9291505056fea265627a7a7231582015335e6e193a1854a8470540d118909ce058e2503b1be6f4d55d85de83c689ea64736f6c634300050c0032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429") + + syntax Bytes ::= "Dai_bin_runtime" [macro] + // ------------------------------------------ + rule Dai_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106101425760003560e01c80637ecebe00116100b8578063a9059cbb1161007c578063a9059cbb146106b4578063b753a98c1461071a578063bb35783b14610768578063bf353dbb146107d6578063dd62ed3e1461082e578063f2d5d56b146108a657610142565b80637ecebe00146104a15780638fcbaf0c146104f957806395d89b411461059f5780639c52a7f1146106225780639dc29fac1461066657610142565b8063313ce5671161010a578063313ce567146102f25780633644e5151461031657806340c10f191461033457806354fd4d501461038257806365fae35e1461040557806370a082311461044957610142565b806306fdde0314610147578063095ea7b3146101ca57806318160ddd1461023057806323b872dd1461024e57806330adf81f146102d4575b600080fd5b61014f6108f4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561018f578082015181840152602081019050610174565b50505050905090810190601f1680156101bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610216600480360360408110156101e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061092d565b604051808215151515815260200191505060405180910390f35b610238610a1f565b6040518082815260200191505060405180910390f35b6102ba6004803603606081101561026457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a25565b604051808215151515815260200191505060405180910390f35b6102dc610f3a565b6040518082815260200191505060405180910390f35b6102fa610f61565b604051808260ff1660ff16815260200191505060405180910390f35b61031e610f66565b6040518082815260200191505060405180910390f35b6103806004803603604081101561034a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f6c565b005b61038a611128565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103ca5780820151818401526020810190506103af565b50505050905090810190601f1680156103f75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104476004803603602081101561041b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611161565b005b61048b6004803603602081101561045f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061128f565b6040518082815260200191505060405180910390f35b6104e3600480360360208110156104b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112a7565b6040518082815260200191505060405180910390f35b61059d600480360361010081101561051057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803515159060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506112bf565b005b6105a76117fa565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105e75780820151818401526020810190506105cc565b50505050905090810190601f1680156106145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106646004803603602081101561063857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611833565b005b6106b26004803603604081101561067c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611961565b005b610700600480360360408110156106ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611df4565b604051808215151515815260200191505060405180910390f35b6107666004803603604081101561073057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e09565b005b6107d46004803603606081101561077e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e19565b005b610818600480360360208110156107ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e2a565b6040518082815260200191505060405180910390f35b6108906004803603604081101561084457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e42565b6040518082815260200191505060405180910390f35b6108f2600480360360408110156108bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e67565b005b6040518060400160405280600e81526020017f44616920537461626c65636f696e00000000000000000000000000000000000081525081565b600081600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60015481565b600081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610adc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4461692f696e73756666696369656e742d62616c616e6365000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610bb457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15610db25781600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4461692f696e73756666696369656e742d616c6c6f77616e636500000000000081525060200191505060405180910390fd5b610d31600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611e77565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610dfb600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611e77565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e87600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611e91565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb60001b81565b601281565b60055481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b611069600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611e91565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110b860015482611e91565b6001819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611215576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60026020528060005260406000206000915090505481565b60046020528060005260406000206000915090505481565b60006005547fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb60001b8a8a8a8a8a604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018215151515815260200196505050505050506040516020818303038152906040528051906020012060405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16141561148c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4461692f696e76616c69642d616464726573732d30000000000000000000000081525060200191505060405180910390fd5b60018185858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156114e9573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614611593576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f696e76616c69642d7065726d6974000000000000000000000000000081525060200191505060405180910390fd5b60008614806115a25750854211155b611614576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f7065726d69742d65787069726564000000000000000000000000000081525060200191505060405180910390fd5b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505587146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4461692f696e76616c69642d6e6f6e636500000000000000000000000000000081525060200191505060405180910390fd5b6000856116e4576000611706565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b905080600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050505050505050565b6040518060400160405280600381526020017f444149000000000000000000000000000000000000000000000000000000000081525081565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4461692f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611a16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4461692f696e73756666696369656e742d62616c616e6365000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611aee57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15611cec5780600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611be5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4461692f696e73756666696369656e742d616c6c6f77616e636500000000000081525060200191505060405180910390fd5b611c6b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611e77565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611d35600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611e77565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d8460015482611e77565b600181905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000611e01338484610a25565b905092915050565b611e14338383610a25565b505050565b611e24838383610a25565b50505050565b60006020528060005260406000206000915090505481565b6003602052816000526040600020602052806000526040600020600091509150505481565b611e72823383610a25565b505050565b6000828284039150811115611e8b57600080fd5b92915050565b6000828284019150811015611ea557600080fd5b9291505056fea265627a7a7231582015335e6e193a1854a8470540d118909ce058e2503b1be6f4d55d85de83c689ea64736f6c634300050c0032") + + syntax Bytes ::= "Jug_bin" [macro] + // ---------------------------------- + rule Jug_bin => #parseByteStack("0x608060405234801561001057600080fd5b5060405161131b38038061131b8339818101604052602081101561003357600080fd5b810190808051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611242806100d96000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063626cb3c511610071578063626cb3c51461020b57806365fae35e146102555780639c52a7f114610299578063bf353dbb146102dd578063d4e8be8314610335578063d9638d3614610383576100b4565b80631a0b287e146100b957806329ae8114146100fb57806336569e77146101335780633b6631951461017d57806344e2a5a8146101ab5780635001f3b5146101ed575b600080fd5b6100f9600480360360608110156100cf57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506103cc565b005b6101316004803603604081101561011157600080fd5b8101908080359060200190929190803590602001909291905050506105f9565b005b61013b610786565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101a96004803603602081101561019357600080fd5b81019080803590602001909291905050506107ac565b005b6101d7600480360360208110156101c157600080fd5b8101908080359060200190929190505050610946565b6040518082815260200191505060405180910390f35b6101f5610c35565b6040518082815260200191505060405180910390f35b610213610c3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102976004803603602081101561026b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c61565b005b6102db600480360360208110156102af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d8f565b005b61031f600480360360208110156102f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ebd565b6040518082815260200191505060405180910390f35b6103816004803603604081101561034b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ed5565b005b6103af6004803603602081101561039957600080fd5b810190808035906020019092919050505061109c565b604051808381526020018281526020019250505060405180910390f35b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610480576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060010154421461050b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4a75672f72686f2d6e6f742d757064617465640000000000000000000000000081525060200191505060405180910390fd5b7f6475747900000000000000000000000000000000000000000000000000000000821415610553578060016000858152602001908152602001600020600001819055506105c1565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4a75672f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f62617365000000000000000000000000000000000000000000000000000000008214156106e1578060048190555061074f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4a75672f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600060016000838152602001908152602001600020905060008160000154146108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4a75672f696c6b2d616c72656164792d696e697400000000000000000000000081525060200191505060405180910390fd5b6b033b2e3c9fd0803ce80000008160000181905550428160010181905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600060016000838152602001908152602001600020600101544210156109d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4a75672f696e76616c69642d6e6f77000000000000000000000000000000000081525060200191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36846040518263ffffffff1660e01b8152600401808281526020019150506040805180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050506040513d6040811015610a7457600080fd5b810190808051906020019092919080519060200190929190505050915050610aeb610ae5610aba60045460016000888152602001908152602001600020600001546110c0565b600160008781526020019081526020016000206001015442036b033b2e3c9fd0803ce80000006110da565b826111a0565b9150600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b65337df84600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b5986866111e5565b6040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610bc957600080fd5b505af1158015610bdd573d6000803e3d6000fd5b50505050426001600085815260200190815260200160002060010181905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450919050565b60045481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f766f770000000000000000000000000000000000000000000000000000000000821415610ff75780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611065565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4a75672f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016020528060005260406000206000915090508060000154908060010154905082565b60008183019050828110156110d457600080fd5b92915050565b600083600081146111805760028406600081146110f9578592506110fd565b8392505b50600283046002850494505b841561117a57858602868782041461112057600080fd5b8181018181101561113057600080fd5b8581049750600287061561116d57878502858982041415891515161561115557600080fd5b8381018181101561116557600080fd5b878104965050505b5050600285049450611109565b50611198565b83600081146111925760009250611196565b8392505b505b509392505050565b6000818302905060008214806111be5750828282816111bb57fe5b04145b6111c757600080fd5b6b033b2e3c9fd0803ce800000081816111dc57fe5b04905092915050565b60008183039050600083121580156111fe575060008212155b61120757600080fd5b9291505056fea265627a7a72315820171ca196f7d984fd5da28988be1d8174b37ded44b773b6dd0e886c788d5546c164736f6c634300050c0032") + + syntax Bytes ::= "Jug_bin_runtime" [macro] + // ------------------------------------------ + rule Jug_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063626cb3c511610071578063626cb3c51461020b57806365fae35e146102555780639c52a7f114610299578063bf353dbb146102dd578063d4e8be8314610335578063d9638d3614610383576100b4565b80631a0b287e146100b957806329ae8114146100fb57806336569e77146101335780633b6631951461017d57806344e2a5a8146101ab5780635001f3b5146101ed575b600080fd5b6100f9600480360360608110156100cf57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506103cc565b005b6101316004803603604081101561011157600080fd5b8101908080359060200190929190803590602001909291905050506105f9565b005b61013b610786565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101a96004803603602081101561019357600080fd5b81019080803590602001909291905050506107ac565b005b6101d7600480360360208110156101c157600080fd5b8101908080359060200190929190505050610946565b6040518082815260200191505060405180910390f35b6101f5610c35565b6040518082815260200191505060405180910390f35b610213610c3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102976004803603602081101561026b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c61565b005b6102db600480360360208110156102af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d8f565b005b61031f600480360360208110156102f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ebd565b6040518082815260200191505060405180910390f35b6103816004803603604081101561034b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ed5565b005b6103af6004803603602081101561039957600080fd5b810190808035906020019092919050505061109c565b604051808381526020018281526020019250505060405180910390f35b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610480576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060010154421461050b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4a75672f72686f2d6e6f742d757064617465640000000000000000000000000081525060200191505060405180910390fd5b7f6475747900000000000000000000000000000000000000000000000000000000821415610553578060016000858152602001908152602001600020600001819055506105c1565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4a75672f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f62617365000000000000000000000000000000000000000000000000000000008214156106e1578060048190555061074f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4a75672f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600060016000838152602001908152602001600020905060008160000154146108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4a75672f696c6b2d616c72656164792d696e697400000000000000000000000081525060200191505060405180910390fd5b6b033b2e3c9fd0803ce80000008160000181905550428160010181905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600060016000838152602001908152602001600020600101544210156109d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4a75672f696e76616c69642d6e6f77000000000000000000000000000000000081525060200191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36846040518263ffffffff1660e01b8152600401808281526020019150506040805180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050506040513d6040811015610a7457600080fd5b810190808051906020019092919080519060200190929190505050915050610aeb610ae5610aba60045460016000888152602001908152602001600020600001546110c0565b600160008781526020019081526020016000206001015442036b033b2e3c9fd0803ce80000006110da565b826111a0565b9150600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b65337df84600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b5986866111e5565b6040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610bc957600080fd5b505af1158015610bdd573d6000803e3d6000fd5b50505050426001600085815260200190815260200160002060010181905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450919050565b60045481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4a75672f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f766f770000000000000000000000000000000000000000000000000000000000821415610ff75780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611065565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4a75672f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016020528060005260406000206000915090508060000154908060010154905082565b60008183019050828110156110d457600080fd5b92915050565b600083600081146111805760028406600081146110f9578592506110fd565b8392505b50600283046002850494505b841561117a57858602868782041461112057600080fd5b8181018181101561113057600080fd5b8581049750600287061561116d57878502858982041415891515161561115557600080fd5b8381018181101561116557600080fd5b878104965050505b5050600285049450611109565b50611198565b83600081146111925760009250611196565b8392505b505b509392505050565b6000818302905060008214806111be5750828282816111bb57fe5b04145b6111c757600080fd5b6b033b2e3c9fd0803ce800000081816111dc57fe5b04905092915050565b60008183039050600083121580156111fe575060008212155b61120757600080fd5b9291505056fea265627a7a72315820171ca196f7d984fd5da28988be1d8174b37ded44b773b6dd0e886c788d5546c164736f6c634300050c0032") + + syntax Bytes ::= "Pot_bin" [macro] + // ---------------------------------- + rule Pot_bin => #parseByteStack("0x608060405234801561001057600080fd5b506040516115853803806115858339818101604052602081101561003357600080fd5b810190808051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506b033b2e3c9fd0803ce80000006003819055506b033b2e3c9fd0803ce8000000600481905550426007819055506001600881905550506114778061010e6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806365fae35e116100a25780639c52a7f1116100715780639c52a7f1146103565780639f678cca1461039a578063bf353dbb146103b8578063c92aecc414610410578063d4e8be831461042e5761010b565b806365fae35e146102bc57806369245009146103005780637f8661a11461030a578063957aa58c146103385761010b565b80632c69ed58116100de5780632c69ed58146101ec57806336569e771461020a578063487bf08214610254578063626cb3c5146102725761010b565b8063049878f3146101105780630bebac861461013e57806320aba08b1461019657806329ae8114146101b4575b600080fd5b61013c6004803603602081101561012657600080fd5b810190808035906020019092919050505061047c565b005b6101806004803603602081101561015457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c7565b6040518082815260200191505060405180910390f35b61019e6106df565b6040518082815260200191505060405180910390f35b6101ea600480360360408110156101ca57600080fd5b8101908080359060200190929190803590602001909291905050506106e5565b005b6101f4610961565b6040518082815260200191505060405180910390f35b610212610967565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61025c61098d565b6040518082815260200191505060405180910390f35b61027a610993565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109b9565b005b610308610ae7565b005b6103366004803603602081101561032057600080fd5b8101908080359060200190929190505050610beb565b005b610340610dbf565b6040518082815260200191505060405180910390f35b6103986004803603602081101561036c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dc5565b005b6103a2610ef3565b6040518082815260200191505060405180910390f35b6103fa600480360360208110156103ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061110e565b6040518082815260200191505060405180910390f35b610418611126565b6040518082815260200191505060405180910390f35b61047a6004803603604081101561044457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061112c565b005b60075442146104f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f742f72686f2d6e6f742d757064617465640000000000000000000000000081525060200191505060405180910390fd5b61053c600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826112f3565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061058b600254826112f3565b600281905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b33306105dd6004548661130d565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561067957600080fd5b505af115801561068d573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016020528060005260406000206000915090505481565b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600160085414610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f506f742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6007544214610888576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f742f72686f2d6e6f742d757064617465640000000000000000000000000081525060200191505060405180910390fd5b7f64737200000000000000000000000000000000000000000000000000000000008214156108bc578060038190555061092a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f506f742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60025481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006008819055506b033b2e3c9fd0803ce80000006003819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b610c34600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611339565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c8360025482611339565b600281905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3033610cd56004548661130d565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610d7157600080fd5b505af1158015610d85573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6000600754421015610f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f506f742f696e76616c69642d6e6f77000000000000000000000000000000000081525060200191505060405180910390fd5b610f95610f8d60035460075442036b033b2e3c9fd0803ce8000000611353565b600454611419565b90506000610fa582600454611339565b90508160048190555042600781905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306110236002548661130d565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156110bf57600080fd5b505af11580156110d3573d6000803e3d6000fd5b50505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45090565b60006020528060005260406000206000915090505481565b60045481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f766f77000000000000000000000000000000000000000000000000000000000082141561124e5780600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506112bc565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f506f742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600082828401915081101561130757600080fd5b92915050565b60008082148061132a575082828385029250828161132757fe5b04145b61133357600080fd5b92915050565b600082828403915081111561134d57600080fd5b92915050565b600083600081146113f957600284066000811461137257859250611376565b8392505b50600283046002850494505b84156113f357858602868782041461139957600080fd5b818101818110156113a957600080fd5b858104975060028706156113e65787850285898204141589151516156113ce57600080fd5b838101818110156113de57600080fd5b878104965050505b5050600285049450611382565b50611411565b836000811461140b576000925061140f565b8392505b505b509392505050565b60006b033b2e3c9fd0803ce8000000611432848461130d565b8161143957fe5b0490509291505056fea265627a7a7231582012ac9f56855a6b6dcac6ac82b295c79e4a756291f2c4de00facc30dd4796636c64736f6c634300050c0032") + + syntax Bytes ::= "Pot_bin_runtime" [macro] + // ------------------------------------------ + rule Pot_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806365fae35e116100a25780639c52a7f1116100715780639c52a7f1146103565780639f678cca1461039a578063bf353dbb146103b8578063c92aecc414610410578063d4e8be831461042e5761010b565b806365fae35e146102bc57806369245009146103005780637f8661a11461030a578063957aa58c146103385761010b565b80632c69ed58116100de5780632c69ed58146101ec57806336569e771461020a578063487bf08214610254578063626cb3c5146102725761010b565b8063049878f3146101105780630bebac861461013e57806320aba08b1461019657806329ae8114146101b4575b600080fd5b61013c6004803603602081101561012657600080fd5b810190808035906020019092919050505061047c565b005b6101806004803603602081101561015457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c7565b6040518082815260200191505060405180910390f35b61019e6106df565b6040518082815260200191505060405180910390f35b6101ea600480360360408110156101ca57600080fd5b8101908080359060200190929190803590602001909291905050506106e5565b005b6101f4610961565b6040518082815260200191505060405180910390f35b610212610967565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61025c61098d565b6040518082815260200191505060405180910390f35b61027a610993565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109b9565b005b610308610ae7565b005b6103366004803603602081101561032057600080fd5b8101908080359060200190929190505050610beb565b005b610340610dbf565b6040518082815260200191505060405180910390f35b6103986004803603602081101561036c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dc5565b005b6103a2610ef3565b6040518082815260200191505060405180910390f35b6103fa600480360360208110156103ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061110e565b6040518082815260200191505060405180910390f35b610418611126565b6040518082815260200191505060405180910390f35b61047a6004803603604081101561044457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061112c565b005b60075442146104f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f742f72686f2d6e6f742d757064617465640000000000000000000000000081525060200191505060405180910390fd5b61053c600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826112f3565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061058b600254826112f3565b600281905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b33306105dd6004548661130d565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561067957600080fd5b505af115801561068d573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016020528060005260406000206000915090505481565b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600160085414610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f506f742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b6007544214610888576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f742f72686f2d6e6f742d757064617465640000000000000000000000000081525060200191505060405180910390fd5b7f64737200000000000000000000000000000000000000000000000000000000008214156108bc578060038190555061092a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f506f742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60025481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006008819055506b033b2e3c9fd0803ce80000006003819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b610c34600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611339565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c8360025482611339565b600281905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3033610cd56004548661130d565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610d7157600080fd5b505af1158015610d85573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6000600754421015610f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f506f742f696e76616c69642d6e6f77000000000000000000000000000000000081525060200191505060405180910390fd5b610f95610f8d60035460075442036b033b2e3c9fd0803ce8000000611353565b600454611419565b90506000610fa582600454611339565b90508160048190555042600781905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306110236002548661130d565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156110bf57600080fd5b505af11580156110d3573d6000803e3d6000fd5b50505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45090565b60006020528060005260406000206000915090505481565b60045481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f766f77000000000000000000000000000000000000000000000000000000000082141561124e5780600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506112bc565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f506f742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600082828401915081101561130757600080fd5b92915050565b60008082148061132a575082828385029250828161132757fe5b04145b61133357600080fd5b92915050565b600082828403915081111561134d57600080fd5b92915050565b600083600081146113f957600284066000811461137257859250611376565b8392505b50600283046002850494505b84156113f357858602868782041461139957600080fd5b818101818110156113a957600080fd5b858104975060028706156113e65787850285898204141589151516156113ce57600080fd5b838101818110156113de57600080fd5b878104965050505b5050600285049450611382565b50611411565b836000811461140b576000925061140f565b8392505b505b509392505050565b60006b033b2e3c9fd0803ce8000000611432848461130d565b8161143957fe5b0490509291505056fea265627a7a7231582012ac9f56855a6b6dcac6ac82b295c79e4a756291f2c4de00facc30dd4796636c64736f6c634300050c0032") + + syntax Bytes ::= "Cat_bin" [macro] + // ---------------------------------- + rule Cat_bin => #parseByteStack("0x608060405234801561001057600080fd5b5060405161190b38038061190b8339818101604052602081101561003357600080fd5b810190808051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016002819055505061182a806100e16000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063957aa58c11610071578063957aa58c1461023f5780639c52a7f11461025d578063bf353dbb146102a1578063d4e8be83146102f9578063d9638d3614610347578063ebecb39d146103c3576100b4565b80631a0b287e146100b957806336569e77146100fb57806345cf223014610145578063626cb3c5146101a757806365fae35e146101f15780636924500914610235575b600080fd5b6100f9600480360360608110156100cf57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061041b565b005b610103610606565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101916004803603604081101561015b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061062c565b6040518082815260200191505060405180910390f35b6101af610e5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102336004803603602081101561020757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e84565b005b61023d610fb2565b005b6102476110a3565b6040518082815260200191505060405180910390f35b61029f6004803603602081101561027357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110a9565b005b6102e3600480360360208110156102b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111d7565b6040518082815260200191505060405180910390f35b6103456004803603604081101561030f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111ef565b005b6103736004803603602081101561035d57600080fd5b81019080803590602001909291905050506113b6565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b610419600480360360608110156103d957600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611400565b005b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146104cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f63686f7000000000000000000000000000000000000000000000000000000000821415610517578060016000858152602001908152602001600020600101819055506105ce565b7f6c756d700000000000000000000000000000000000000000000000000000000082141561055f578060016000858152602001908152602001600020600201819055506105cd565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4361742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36866040518263ffffffff1660e01b81526004018082815260200191505060606040518083038186803b1580156106a457600080fd5b505afa1580156106b8573d6000803e3d6000fd5b505050506040513d60608110156106ce57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050509250925050600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632424be5c88886040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050604080518083038186803b1580156107a157600080fd5b505afa1580156107b5573d6000803e3d6000fd5b505050506040513d60408110156107cb57600080fd5b81019080805190602001909291908051906020019092919050505091509150600160025414610862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4361742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008311801561088357506108778185611784565b6108818385611784565b105b6108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4361742f6e6f742d756e7361666500000000000000000000000000000000000081525060200191505060405180910390fd5b600061091783600160008b8152602001908152602001600020600201546117b0565b905061093582846109288486611784565b8161092f57fe5b046117b0565b91507f8000000000000000000000000000000000000000000000000000000000000000811115801561098757507f80000000000000000000000000000000000000000000000000000000000000008211155b6109f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4361742f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f40898930600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686600003886000036040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663697efb78610ba28488611784565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b505050506001600089815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663351de60088600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610c8f610c73878b611784565b600160008f8152602001908152602001600020600101546117cc565b8560006040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200195505050505050602060405180830381600087803b158015610d3c57600080fd5b505af1158015610d50573d6000803e3d6000fd5b505050506040513d6020811015610d6657600080fd5b810190808051906020019092919050505095508673ffffffffffffffffffffffffffffffffffffffff16887fa716da86bc1fb6d43d1493373f34d7a418b619681cd7b90f7ea667ba1489be288385610dbe878b611784565b600160008f815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168c604051808681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019550505050505060405180910390a3505050505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006002819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60025481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461115d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146112a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f766f7700000000000000000000000000000000000000000000000000000000008214156113115780600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061137f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4361742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f666c6970000000000000000000000000000000000000000000000000000000008214156116de57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc4d20fa6001600086815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156115b357600080fd5b505af11580156115c7573d6000803e3d6000fd5b50505050806001600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156116c157600080fd5b505af11580156116d5573d6000803e3d6000fd5b5050505061174c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4361742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b6000808214806117a1575082828385029250828161179e57fe5b04145b6117aa57600080fd5b92915050565b6000818311156117c2578190506117c6565b8290505b92915050565b60006b033b2e3c9fd0803ce80000006117e58484611784565b816117ec57fe5b0490509291505056fea265627a7a72315820bf13a907e197c5e2f2ca0698f7608d926c495a6d2070dec1e9437d77ba4c155764736f6c634300050c0032") + + syntax Bytes ::= "Cat_bin_runtime" [macro] + // ------------------------------------------ + rule Cat_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063957aa58c11610071578063957aa58c1461023f5780639c52a7f11461025d578063bf353dbb146102a1578063d4e8be83146102f9578063d9638d3614610347578063ebecb39d146103c3576100b4565b80631a0b287e146100b957806336569e77146100fb57806345cf223014610145578063626cb3c5146101a757806365fae35e146101f15780636924500914610235575b600080fd5b6100f9600480360360608110156100cf57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061041b565b005b610103610606565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101916004803603604081101561015b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061062c565b6040518082815260200191505060405180910390f35b6101af610e5e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102336004803603602081101561020757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e84565b005b61023d610fb2565b005b6102476110a3565b6040518082815260200191505060405180910390f35b61029f6004803603602081101561027357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110a9565b005b6102e3600480360360208110156102b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111d7565b6040518082815260200191505060405180910390f35b6103456004803603604081101561030f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111ef565b005b6103736004803603602081101561035d57600080fd5b81019080803590602001909291905050506113b6565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b610419600480360360608110156103d957600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611400565b005b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146104cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f63686f7000000000000000000000000000000000000000000000000000000000821415610517578060016000858152602001908152602001600020600101819055506105ce565b7f6c756d700000000000000000000000000000000000000000000000000000000082141561055f578060016000858152602001908152602001600020600201819055506105cd565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4361742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36866040518263ffffffff1660e01b81526004018082815260200191505060606040518083038186803b1580156106a457600080fd5b505afa1580156106b8573d6000803e3d6000fd5b505050506040513d60608110156106ce57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050509250925050600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632424be5c88886040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050604080518083038186803b1580156107a157600080fd5b505afa1580156107b5573d6000803e3d6000fd5b505050506040513d60408110156107cb57600080fd5b81019080805190602001909291908051906020019092919050505091509150600160025414610862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4361742f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008311801561088357506108778185611784565b6108818385611784565b105b6108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4361742f6e6f742d756e7361666500000000000000000000000000000000000081525060200191505060405180910390fd5b600061091783600160008b8152602001908152602001600020600201546117b0565b905061093582846109288486611784565b8161092f57fe5b046117b0565b91507f8000000000000000000000000000000000000000000000000000000000000000811115801561098757507f80000000000000000000000000000000000000000000000000000000000000008211155b6109f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4361742f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f40898930600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686600003886000036040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663697efb78610ba28488611784565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b505050506001600089815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663351de60088600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610c8f610c73878b611784565b600160008f8152602001908152602001600020600101546117cc565b8560006040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200195505050505050602060405180830381600087803b158015610d3c57600080fd5b505af1158015610d50573d6000803e3d6000fd5b505050506040513d6020811015610d6657600080fd5b810190808051906020019092919050505095508673ffffffffffffffffffffffffffffffffffffffff16887fa716da86bc1fb6d43d1493373f34d7a418b619681cd7b90f7ea667ba1489be288385610dbe878b611784565b600160008f815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168c604051808681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019550505050505060405180910390a3505050505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60006002819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60025481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461115d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146112a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f766f7700000000000000000000000000000000000000000000000000000000008214156113115780600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061137f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4361742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4361742f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f666c6970000000000000000000000000000000000000000000000000000000008214156116de57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc4d20fa6001600086815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156115b357600080fd5b505af11580156115c7573d6000803e3d6000fd5b50505050806001600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156116c157600080fd5b505af11580156116d5573d6000803e3d6000fd5b5050505061174c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4361742f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b6000808214806117a1575082828385029250828161179e57fe5b04145b6117aa57600080fd5b92915050565b6000818311156117c2578190506117c6565b8290505b92915050565b60006b033b2e3c9fd0803ce80000006117e58484611784565b816117ec57fe5b0490509291505056fea265627a7a72315820bf13a907e197c5e2f2ca0698f7608d926c495a6d2070dec1e9437d77ba4c155764736f6c634300050c0032") + + syntax Bytes ::= "GemJoin_bin" [macro] + // -------------------------------------- + rule GemJoin_bin => #parseByteStack("0x608060405234801561001057600080fd5b50604051610f6e380380610f6e8339818101604052606081101561003357600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160058190555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160028190555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561019557600080fd5b505afa1580156101a9573d6000803e3d6000fd5b505050506040513d60208110156101bf57600080fd5b8101908080519060200190929190505050600481905550505050610d86806101e86000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063957aa58c11610071578063957aa58c146101de5780639c52a7f1146101fc578063b3bcfa8214610240578063bf353dbb1461025e578063c5ce281e146102b6578063ef693bed146102d4576100a9565b806336569e77146100ae5780633b4da69f146100f857806365fae35e14610146578063692450091461018a5780637bd2bea714610194575b600080fd5b6100b6610322565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101446004803603604081101561010e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610348565b005b6101886004803603602081101561015c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c3565b005b6101926107f1565b005b61019c6108e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101e6610908565b6040518082815260200191505060405180910390f35b61023e6004803603602081101561021257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061090e565b005b610248610a3c565b6040518082815260200191505060405180910390f35b6102a06004803603602081101561027457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a42565b6040518082815260200191505060405180910390f35b6102be610a5a565b6040518082815260200191505060405180910390f35b610320600480360360408110156102ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a60565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6001600554146103c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f47656d4a6f696e2f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b6000811215610437576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f47656d4a6f696e2f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637cdd3fde60025484846040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156104ea57600080fd5b505af11580156104fe573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156105df57600080fd5b505af11580156105f3573d6000803e3d6000fd5b505050506040513d602081101561060957600080fd5b810190808051906020019092919050505061068c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f47656d4a6f696e2f6661696c65642d7472616e7366657200000000000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f47656d4a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146108a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f47656d4a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60006005819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146109c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f47656d4a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60045481565b60006020528060005260406000206000915090505481565b60025481565b7f8000000000000000000000000000000000000000000000000000000000000000811115610af6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f47656d4a6f696e2f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637cdd3fde60025433846000036040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c6d57600080fd5b505af1158015610c81573d6000803e3d6000fd5b505050506040513d6020811015610c9757600080fd5b8101908080519060200190929190505050610d1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f47656d4a6f696e2f6661696c65642d7472616e7366657200000000000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505056fea265627a7a7231582083bed50269f5c3d47da587567ef8517765519d503bc3b3b987308aac27d16fb564736f6c634300050c0032") + + syntax Bytes ::= "GemJoin_bin_runtime" [macro] + // ---------------------------------------------- + rule GemJoin_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063957aa58c11610071578063957aa58c146101de5780639c52a7f1146101fc578063b3bcfa8214610240578063bf353dbb1461025e578063c5ce281e146102b6578063ef693bed146102d4576100a9565b806336569e77146100ae5780633b4da69f146100f857806365fae35e14610146578063692450091461018a5780637bd2bea714610194575b600080fd5b6100b6610322565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101446004803603604081101561010e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610348565b005b6101886004803603602081101561015c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c3565b005b6101926107f1565b005b61019c6108e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101e6610908565b6040518082815260200191505060405180910390f35b61023e6004803603602081101561021257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061090e565b005b610248610a3c565b6040518082815260200191505060405180910390f35b6102a06004803603602081101561027457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a42565b6040518082815260200191505060405180910390f35b6102be610a5a565b6040518082815260200191505060405180910390f35b610320600480360360408110156102ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a60565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6001600554146103c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f47656d4a6f696e2f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b6000811215610437576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f47656d4a6f696e2f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637cdd3fde60025484846040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156104ea57600080fd5b505af11580156104fe573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156105df57600080fd5b505af11580156105f3573d6000803e3d6000fd5b505050506040513d602081101561060957600080fd5b810190808051906020019092919050505061068c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f47656d4a6f696e2f6661696c65642d7472616e7366657200000000000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f47656d4a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146108a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f47656d4a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60006005819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146109c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f47656d4a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60045481565b60006020528060005260406000206000915090505481565b60025481565b7f8000000000000000000000000000000000000000000000000000000000000000811115610af6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f47656d4a6f696e2f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637cdd3fde60025433846000036040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c6d57600080fd5b505af1158015610c81573d6000803e3d6000fd5b505050506040513d6020811015610c9757600080fd5b8101908080519060200190929190505050610d1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f47656d4a6f696e2f6661696c65642d7472616e7366657200000000000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505056fea265627a7a7231582083bed50269f5c3d47da587567ef8517765519d503bc3b3b987308aac27d16fb564736f6c634300050c0032") + + syntax Bytes ::= "DaiJoin_bin" [macro] + // -------------------------------------- + rule DaiJoin_bin => #parseByteStack("0x608060405234801561001057600080fd5b50604051610c91380380610c918339818101604052604081101561003357600080fd5b81019080805190602001909291908051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160038190555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610b648061012d6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063957aa58c11610066578063957aa58c1461017e5780639c52a7f11461019c578063bf353dbb146101e0578063ef693bed14610238578063f4b9fa751461028657610093565b806336569e77146100985780633b4da69f146100e257806365fae35e146101305780636924500914610174575b600080fd5b6100a06102d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61012e600480360360408110156100f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506102f6565b005b6101726004803603602081101561014657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104f8565b005b61017c610626565b005b610186610717565b6040518082815260200191505060405180910390f35b6101de600480360360208110156101b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061071d565b005b610222600480360360208110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061084b565b6040518082815260200191505060405180910390f35b6102846004803603604081101561024e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610863565b005b61028e610add565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b308461034c6b033b2e3c9fd0803ce800000086610b03565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156103e857600080fd5b505af11580156103fc573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156104a957600080fd5b505af11580156104bd573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146105ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4461694a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146106da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4461694a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60006003819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60035481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146107d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4461694a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b6001600354146108db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4461694a6f696e2f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b33306109316b033b2e3c9fd0803ce800000086610b03565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156109cd57600080fd5b505af11580156109e1573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610a8e57600080fd5b505af1158015610aa2573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080821480610b205750828283850292508281610b1d57fe5b04145b610b2957600080fd5b9291505056fea265627a7a72315820973dce5b6612fe5d6b238645cf5425fa1ac980b80540dc1346c9437a243f73b564736f6c634300050c0032") + + syntax Bytes ::= "DaiJoin_bin_runtime" [macro] + // ---------------------------------------------- + rule DaiJoin_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063957aa58c11610066578063957aa58c1461017e5780639c52a7f11461019c578063bf353dbb146101e0578063ef693bed14610238578063f4b9fa751461028657610093565b806336569e77146100985780633b4da69f146100e257806365fae35e146101305780636924500914610174575b600080fd5b6100a06102d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61012e600480360360408110156100f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506102f6565b005b6101726004803603602081101561014657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104f8565b005b61017c610626565b005b610186610717565b6040518082815260200191505060405180910390f35b6101de600480360360208110156101b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061071d565b005b610222600480360360208110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061084b565b6040518082815260200191505060405180910390f35b6102846004803603604081101561024e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610863565b005b61028e610add565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b308461034c6b033b2e3c9fd0803ce800000086610b03565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156103e857600080fd5b505af11580156103fc573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156104a957600080fd5b505af11580156104bd573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146105ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4461694a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146106da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4461694a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60006003819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60035481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146107d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4461694a6f696e2f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b6001600354146108db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4461694a6f696e2f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b33306109316b033b2e3c9fd0803ce800000086610b03565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156109cd57600080fd5b505af11580156109e1573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610a8e57600080fd5b505af1158015610aa2573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080821480610b205750828283850292508281610b1d57fe5b04145b610b2957600080fd5b9291505056fea265627a7a72315820973dce5b6612fe5d6b238645cf5425fa1ac980b80540dc1346c9437a243f73b564736f6c634300050c0032") + + syntax Bytes ::= "Flipper_bin" [macro] + // -------------------------------------- + rule Flipper_bin => #parseByteStack("0x6080604052670e92596fd6290000600455612a30600560006101000a81548165ffffffffffff021916908365ffffffffffff1602179055506202a300600560066101000a81548165ffffffffffff021916908365ffffffffffff160217905550600060065534801561007057600080fd5b50604051612e30380380612e308339818101604052604081101561009357600080fd5b81019080805190602001909291908051906020019092919050505081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060038190555060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050612ce58061014b6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806365fae35e116100a2578063c5ce281e11610071578063c5ce281e1461051d578063c959c42b1461053b578063cfc4af5514610569578063cfdd330214610597578063fc7b6aee146105b55761010b565b806365fae35e1461041f5780637d780d82146104635780639c52a7f114610481578063bf353dbb146104c55761010b565b80634423c5f1116100de5780634423c5f1146102565780634b43ed121461036d5780634e8b1dd5146103af5780635ff3a382146103dd5761010b565b806326e027f11461011057806329ae81141461013e578063351de6001461017657806336569e771461020c575b600080fd5b61013c6004803603602081101561012657600080fd5b81019080803590602001909291905050506105e3565b005b6101746004803603604081101561015457600080fd5b810190808035906020019092919080359060200190929190505050610b72565b005b6101f6600480360360a081101561018c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050610da5565b6040518082815260200191505060405180910390f35b61021461122e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102826004803603602081101561026c57600080fd5b8101908080359060200190929190505050611254565b604051808981526020018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018665ffffffffffff1665ffffffffffff1681526020018565ffffffffffff1665ffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019850505050505050505060405180910390f35b6103ad6004803603606081101561038357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611320565b005b6103b7611bd4565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b61041d600480360360608110156103f357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611bec565b005b6104616004803603602081101561043557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612473565b005b61046b6125a1565b6040518082815260200191505060405180910390f35b6104c36004803603602081101561049757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125a7565b005b610507600480360360208110156104db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126d5565b6040518082815260200191505060405180910390f35b6105256126ed565b6040518082815260200191505060405180910390f35b6105676004803603602081101561055157600080fd5b81019080803590602001909291905050506126f3565b005b610571612a65565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b61059f612a7d565b6040518082815260200191505060405180910390f35b6105e1600480360360208110156105cb57600080fd5b8101908080359060200190929190505050612a83565b005b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610697576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610770576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c69707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b6001600082815260200190815260200160002060050154600160008381526020019081526020016000206000015410610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c69707065722f616c72656164792d64656e742d706861736500000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e600354303360016000878152602001908152602001600020600101546040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561090e57600080fd5b505af1158015610922573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610a4f57600080fd5b505af1158015610a63573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600582016000905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610c26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7f6265670000000000000000000000000000000000000000000000000000000000821415610c5a5780600481905550610d6e565b7f74746c0000000000000000000000000000000000000000000000000000000000821415610cac5780600560006101000a81548165ffffffffffff021916908365ffffffffffff160217905550610d6d565b7f7461750000000000000000000000000000000000000000000000000000000000821415610cfe5780600560066101000a81548165ffffffffffff021916908365ffffffffffff160217905550610d6c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466c69707065722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60065410610ef2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c69707065722f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b6006600081546001019190508190559050816001600083815260200190815260200160002060000181905550826001600083815260200190815260200160002060010181905550336001600083815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fac42600560069054906101000a900465ffffffffffff16612c5a565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff160217905550856001600083815260200190815260200160002060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846001600083815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836001600083815260200190815260200160002060050181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e6003543330876040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561119057600080fd5b505af11580156111a4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fc84ce3a1172f0dec3173f04caaa6005151a4bfe40d4c9f3ea28dba5f719b2a7a838686896040518085815260200184815260200183815260200182815260200194505050505060405180910390a395945050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900465ffffffffffff169080600201601a9054906101000a900465ffffffffffff16908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050154905088565b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c69707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180611467575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b6114d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff161161157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600101548214611609576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c69707065722f6c6f742d6e6f742d6d61746368696e67000000000000000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060050154811115611695576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f466c69707065722f6869676865722d7468616e2d74616200000000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548111611720576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6269642d6e6f742d6869676865720000000000000000000081525060200191505060405180910390fd5b6117426004546001600086815260200190815260200160002060000154612c84565b61175482670de0b6b3a7640000612c84565b1015806117765750600160008481526020019081526020016000206005015481145b6117e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c69707065722f696e73756666696369656e742d696e63726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119e857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000888152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561197a57600080fd5b505af115801561198e573d6000803e3d6000fd5b50505050336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008881526020019081526020016000206000015485036040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611b1357600080fd5b505af1158015611b27573d6000803e3d6000fd5b50505050806001600085815260200190815260200160002060000181905550611b6442600560009054906101000a900465ffffffffffff16612c5a565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600560009054906101000a900465ffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611cc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c69707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180611d33575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b611da5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1611611e4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548114611ed5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c69707065722f6e6f742d6d61746368696e672d626964000000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600501548114611f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f466c69707065722f74656e642d6e6f742d66696e69736865640000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600101548210611feb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f466c69707065722f6c6f742d6e6f742d6c6f776572000000000000000000000081525060200191505060405180910390fd5b6120136001600085815260200190815260200160002060010154670de0b6b3a7640000612c84565b61201f60045484612c84565b1115612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c69707065722f696e73756666696369656e742d646563726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461227d57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561220f57600080fd5b505af1158015612223573d6000803e3d6000fd5b50505050336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e600354306001600088815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686600160008a815260200190815260200160002060010154036040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b1580156123b257600080fd5b505af11580156123c6573d6000803e3d6000fd5b5050505081600160008581526020019081526020016000206001018190555061240342600560009054906101000a900465ffffffffffff16612c5a565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60045481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461265b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60035481565b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161415801561279d5750426001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16108061279c57504260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff16105b5b61280f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c69707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e600354306001600086815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000878152602001908152602001600020600101546040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561294257600080fd5b505af1158015612956573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600582016000905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600560069054906101000a900465ffffffffffff1681565b60065481565b4260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1610612b28576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c69707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614612bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c69707065722f6269642d616c72656164792d706c6163656400000000000081525060200191505060405180910390fd5b612bec42600560069054906101000a900465ffffffffffff16612c5a565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60008265ffffffffffff1682840191508165ffffffffffff161015612c7e57600080fd5b92915050565b600080821480612ca15750828283850292508281612c9e57fe5b04145b612caa57600080fd5b9291505056fea265627a7a723158205bf8d8db250074722a9a8897ef6594c97ba781ee0b5215bd97c249a718d9ee2a64736f6c634300050c0032") + + syntax Bytes ::= "Flipper_bin_runtime" [macro] + // ---------------------------------------------- + rule Flipper_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806365fae35e116100a2578063c5ce281e11610071578063c5ce281e1461051d578063c959c42b1461053b578063cfc4af5514610569578063cfdd330214610597578063fc7b6aee146105b55761010b565b806365fae35e1461041f5780637d780d82146104635780639c52a7f114610481578063bf353dbb146104c55761010b565b80634423c5f1116100de5780634423c5f1146102565780634b43ed121461036d5780634e8b1dd5146103af5780635ff3a382146103dd5761010b565b806326e027f11461011057806329ae81141461013e578063351de6001461017657806336569e771461020c575b600080fd5b61013c6004803603602081101561012657600080fd5b81019080803590602001909291905050506105e3565b005b6101746004803603604081101561015457600080fd5b810190808035906020019092919080359060200190929190505050610b72565b005b6101f6600480360360a081101561018c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050610da5565b6040518082815260200191505060405180910390f35b61021461122e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102826004803603602081101561026c57600080fd5b8101908080359060200190929190505050611254565b604051808981526020018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018665ffffffffffff1665ffffffffffff1681526020018565ffffffffffff1665ffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019850505050505050505060405180910390f35b6103ad6004803603606081101561038357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611320565b005b6103b7611bd4565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b61041d600480360360608110156103f357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611bec565b005b6104616004803603602081101561043557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612473565b005b61046b6125a1565b6040518082815260200191505060405180910390f35b6104c36004803603602081101561049757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125a7565b005b610507600480360360208110156104db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126d5565b6040518082815260200191505060405180910390f35b6105256126ed565b6040518082815260200191505060405180910390f35b6105676004803603602081101561055157600080fd5b81019080803590602001909291905050506126f3565b005b610571612a65565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b61059f612a7d565b6040518082815260200191505060405180910390f35b6105e1600480360360208110156105cb57600080fd5b8101908080359060200190929190505050612a83565b005b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610697576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610770576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c69707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b6001600082815260200190815260200160002060050154600160008381526020019081526020016000206000015410610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c69707065722f616c72656164792d64656e742d706861736500000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e600354303360016000878152602001908152602001600020600101546040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561090e57600080fd5b505af1158015610922573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610a4f57600080fd5b505af1158015610a63573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600582016000905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610c26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7f6265670000000000000000000000000000000000000000000000000000000000821415610c5a5780600481905550610d6e565b7f74746c0000000000000000000000000000000000000000000000000000000000821415610cac5780600560006101000a81548165ffffffffffff021916908365ffffffffffff160217905550610d6d565b7f7461750000000000000000000000000000000000000000000000000000000000821415610cfe5780600560066101000a81548165ffffffffffff021916908365ffffffffffff160217905550610d6c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466c69707065722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60065410610ef2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c69707065722f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b6006600081546001019190508190559050816001600083815260200190815260200160002060000181905550826001600083815260200190815260200160002060010181905550336001600083815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fac42600560069054906101000a900465ffffffffffff16612c5a565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff160217905550856001600083815260200190815260200160002060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846001600083815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836001600083815260200190815260200160002060050181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e6003543330876040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561119057600080fd5b505af11580156111a4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fc84ce3a1172f0dec3173f04caaa6005151a4bfe40d4c9f3ea28dba5f719b2a7a838686896040518085815260200184815260200183815260200182815260200194505050505060405180910390a395945050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900465ffffffffffff169080600201601a9054906101000a900465ffffffffffff16908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050154905088565b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c69707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180611467575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b6114d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff161161157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600101548214611609576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c69707065722f6c6f742d6e6f742d6d61746368696e67000000000000000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060050154811115611695576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f466c69707065722f6869676865722d7468616e2d74616200000000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548111611720576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6269642d6e6f742d6869676865720000000000000000000081525060200191505060405180910390fd5b6117426004546001600086815260200190815260200160002060000154612c84565b61175482670de0b6b3a7640000612c84565b1015806117765750600160008481526020019081526020016000206005015481145b6117e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c69707065722f696e73756666696369656e742d696e63726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119e857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000888152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561197a57600080fd5b505af115801561198e573d6000803e3d6000fd5b50505050336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008881526020019081526020016000206000015485036040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611b1357600080fd5b505af1158015611b27573d6000803e3d6000fd5b50505050806001600085815260200190815260200160002060000181905550611b6442600560009054906101000a900465ffffffffffff16612c5a565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600560009054906101000a900465ffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611cc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c69707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180611d33575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b611da5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1611611e4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c69707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548114611ed5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c69707065722f6e6f742d6d61746368696e672d626964000000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600501548114611f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f466c69707065722f74656e642d6e6f742d66696e69736865640000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600101548210611feb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f466c69707065722f6c6f742d6e6f742d6c6f776572000000000000000000000081525060200191505060405180910390fd5b6120136001600085815260200190815260200160002060010154670de0b6b3a7640000612c84565b61201f60045484612c84565b1115612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c69707065722f696e73756666696369656e742d646563726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461227d57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561220f57600080fd5b505af1158015612223573d6000803e3d6000fd5b50505050336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e600354306001600088815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686600160008a815260200190815260200160002060010154036040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b1580156123b257600080fd5b505af11580156123c6573d6000803e3d6000fd5b5050505081600160008581526020019081526020016000206001018190555061240342600560009054906101000a900465ffffffffffff16612c5a565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60045481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461265b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c69707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60035481565b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161415801561279d5750426001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16108061279c57504260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff16105b5b61280f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c69707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e600354306001600086815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000878152602001908152602001600020600101546040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561294257600080fd5b505af1158015612956573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600582016000905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600560069054906101000a900465ffffffffffff1681565b60065481565b4260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1610612b28576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c69707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614612bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c69707065722f6269642d616c72656164792d706c6163656400000000000081525060200191505060405180910390fd5b612bec42600560069054906101000a900465ffffffffffff16612c5a565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60008265ffffffffffff1682840191508165ffffffffffff161015612c7e57600080fd5b92915050565b600080821480612ca15750828283850292508281612c9e57fe5b04145b612caa57600080fd5b9291505056fea265627a7a723158205bf8d8db250074722a9a8897ef6594c97ba781ee0b5215bd97c249a718d9ee2a64736f6c634300050c0032") + + syntax Bytes ::= "Flopper_bin" [macro] + // -------------------------------------- + rule Flopper_bin => #parseByteStack("0x6080604052670e92596fd62900006004556714d1120d7b160000600555612a30600660006101000a81548165ffffffffffff021916908365ffffffffffff1602179055506202a3006006806101000a81548165ffffffffffff021916908365ffffffffffff160217905550600060075534801561007b57600080fd5b5060405161242c38038061242c8339818101604052604081101561009e57600080fd5b81019080805190602001909291908051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016008819055505050612294806101986000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637d780d82116100ad578063bf353dbb11610071578063bf353dbb146104e7578063c959c42b1461053f578063cfc4af551461056d578063cfdd33021461059b578063fc7b6aee146105b95761012c565b80637d780d82146103dd5780639361266c146103fb578063957aa58c146104195780639c52a7f114610437578063b7e9cd241461047b5761012c565b80635ff3a382116100f45780635ff3a382146102b9578063626cb3c5146102fb57806365fae35e1461034557806369245009146103895780637bd2bea7146103935761012c565b806326e027f11461013157806329ae81141461015f57806336569e77146101975780634423c5f1146101e15780634e8b1dd51461028b575b600080fd5b61015d6004803603602081101561014757600080fd5b81019080803590602001909291905050506105e7565b005b6101956004803603604081101561017557600080fd5b810190808035906020019092919080359060200190929190505050610950565b005b61019f610bb7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61020d600480360360208110156101f757600080fd5b8101908080359060200190929190505050610bdd565b604051808681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018365ffffffffffff1665ffffffffffff1681526020018265ffffffffffff1665ffffffffffff1681526020019550505050505060405180910390f35b610293610c57565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b6102f9600480360360608110156102cf57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610c6f565b005b610303611538565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103876004803603602081101561035b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061155e565b005b61039161168c565b005b61039b6117be565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e56117e4565b6040518082815260200191505060405180910390f35b6104036117ea565b6040518082815260200191505060405180910390f35b6104216117f0565b6040518082815260200191505060405180910390f35b6104796004803603602081101561044d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117f6565b005b6104d16004803603606081101561049157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611924565b6040518082815260200191505060405180910390f35b610529600480360360208110156104fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3f565b6040518082815260200191505060405180910390f35b61056b6004803603602081101561055557600080fd5b8101908080359060200190929190505050611c57565b005b610575611fad565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b6105a3611fc4565b6040518082815260200191505060405180910390f35b6105e5600480360360208110156105cf57600080fd5b8101908080359060200190929190505050611fca565b005b60006008541461065f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f466c6f707065722f7374696c6c2d6c697665000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610738576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c6f707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561088357600080fd5b505af1158015610897573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7f6265670000000000000000000000000000000000000000000000000000000000821415610a385780600481905550610b80565b7f7061640000000000000000000000000000000000000000000000000000000000821415610a6c5780600581905550610b7f565b7f74746c0000000000000000000000000000000000000000000000000000000000821415610abe5780600660006101000a81548165ffffffffffff021916908365ffffffffffff160217905550610b7e565b7f7461750000000000000000000000000000000000000000000000000000000000821415610b0f57806006806101000a81548165ffffffffffff021916908365ffffffffffff160217905550610b7d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466c6f707065722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900465ffffffffffff169080600201601a9054906101000a900465ffffffffffff16905085565b600660009054906101000a900465ffffffffffff1681565b600160085414610ce7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610dc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c6f707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180610e2e575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b610ea0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c6f707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1611610f45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c6f707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548114610fd0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c6f707065722f6e6f742d6d61746368696e672d626964000000000000000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060010154821061105b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f466c6f707065722f6c6f742d6e6f742d6c6f776572000000000000000000000081525060200191505060405180910390fd5b6110836001600085815260200190815260200160002060010154670de0b6b3a76400006121ed565b61108f600454846121ed565b1115611103576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c6f707065722f696e73756666696369656e742d646563726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461148f57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561127f57600080fd5b505af1158015611293573d6000803e3d6000fd5b5050505060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614156114395760006001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632a1d2b3c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561135057600080fd5b505af1158015611364573d6000803e3d6000fd5b505050506040513d602081101561137a57600080fd5b810190808051906020019092919050505090506001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632506855a6113e98484612219565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561141f57600080fd5b505af1158015611433573d6000803e3d6000fd5b50505050505b336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8160016000858152602001908152602001600020600101819055506114c842600660009054906101000a900465ffffffffffff16612235565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611740576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600060088190555033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60055481565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160085414611a52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60075410611ae9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b6007600081546001019190508190559050816001600083815260200190815260200160002060000181905550826001600083815260200190815260200160002060010181905550836001600083815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611ba2426006809054906101000a900465ffffffffffff16612235565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff167f7e8881001566f9f89aedb9c5dc3d856a2b81e5235a8196413ed484be91cc0df682858560405180848152602001838152602001828152602001935050505060405180910390a29392505050565b60006020528060005260406000206000915090505481565b600160085414611ccf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614158015611d795750426001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161080611d7857504260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff16105b5b611deb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c6f707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f196001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000858152602001908152602001600020600101546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611ee057600080fd5b505af1158015611ef4573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6006809054906101000a900465ffffffffffff1681565b60075481565b4260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff161061206f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c6f707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c6f707065722f6269642d616c72656164792d706c6163656400000000000081525060200191505060405180910390fd5b670de0b6b3a764000061214060055460016000858152602001908152602001600020600101546121ed565b8161214757fe5b04600160008381526020019081526020016000206001018190555061217f426006809054906101000a900465ffffffffffff16612235565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60008082148061220a575082828385029250828161220757fe5b04145b61221357600080fd5b92915050565b60008183111561222b5781905061222f565b8290505b92915050565b60008265ffffffffffff1682840191508165ffffffffffff16101561225957600080fd5b9291505056fea265627a7a723158205e1409f4f0c0165ca7346388d0afdcca6757261ff7f56d1c76a3df8267f2bd0664736f6c634300050c0032") + + syntax Bytes ::= "Flopper_bin_runtime" [macro] + // ---------------------------------------------- + rule Flopper_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80637d780d82116100ad578063bf353dbb11610071578063bf353dbb146104e7578063c959c42b1461053f578063cfc4af551461056d578063cfdd33021461059b578063fc7b6aee146105b95761012c565b80637d780d82146103dd5780639361266c146103fb578063957aa58c146104195780639c52a7f114610437578063b7e9cd241461047b5761012c565b80635ff3a382116100f45780635ff3a382146102b9578063626cb3c5146102fb57806365fae35e1461034557806369245009146103895780637bd2bea7146103935761012c565b806326e027f11461013157806329ae81141461015f57806336569e77146101975780634423c5f1146101e15780634e8b1dd51461028b575b600080fd5b61015d6004803603602081101561014757600080fd5b81019080803590602001909291905050506105e7565b005b6101956004803603604081101561017557600080fd5b810190808035906020019092919080359060200190929190505050610950565b005b61019f610bb7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61020d600480360360208110156101f757600080fd5b8101908080359060200190929190505050610bdd565b604051808681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018365ffffffffffff1665ffffffffffff1681526020018265ffffffffffff1665ffffffffffff1681526020019550505050505060405180910390f35b610293610c57565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b6102f9600480360360608110156102cf57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610c6f565b005b610303611538565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103876004803603602081101561035b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061155e565b005b61039161168c565b005b61039b6117be565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e56117e4565b6040518082815260200191505060405180910390f35b6104036117ea565b6040518082815260200191505060405180910390f35b6104216117f0565b6040518082815260200191505060405180910390f35b6104796004803603602081101561044d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117f6565b005b6104d16004803603606081101561049157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611924565b6040518082815260200191505060405180910390f35b610529600480360360208110156104fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3f565b6040518082815260200191505060405180910390f35b61056b6004803603602081101561055557600080fd5b8101908080359060200190929190505050611c57565b005b610575611fad565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b6105a3611fc4565b6040518082815260200191505060405180910390f35b6105e5600480360360208110156105cf57600080fd5b8101908080359060200190929190505050611fca565b005b60006008541461065f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f466c6f707065722f7374696c6c2d6c697665000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610738576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c6f707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561088357600080fd5b505af1158015610897573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7f6265670000000000000000000000000000000000000000000000000000000000821415610a385780600481905550610b80565b7f7061640000000000000000000000000000000000000000000000000000000000821415610a6c5780600581905550610b7f565b7f74746c0000000000000000000000000000000000000000000000000000000000821415610abe5780600660006101000a81548165ffffffffffff021916908365ffffffffffff160217905550610b7e565b7f7461750000000000000000000000000000000000000000000000000000000000821415610b0f57806006806101000a81548165ffffffffffff021916908365ffffffffffff160217905550610b7d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466c6f707065722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900465ffffffffffff169080600201601a9054906101000a900465ffffffffffff16905085565b600660009054906101000a900465ffffffffffff1681565b600160085414610ce7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610dc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c6f707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180610e2e575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b610ea0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c6f707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1611610f45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c6f707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548114610fd0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c6f707065722f6e6f742d6d61746368696e672d626964000000000000000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060010154821061105b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f466c6f707065722f6c6f742d6e6f742d6c6f776572000000000000000000000081525060200191505060405180910390fd5b6110836001600085815260200190815260200160002060010154670de0b6b3a76400006121ed565b61108f600454846121ed565b1115611103576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c6f707065722f696e73756666696369656e742d646563726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461148f57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561127f57600080fd5b505af1158015611293573d6000803e3d6000fd5b5050505060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614156114395760006001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632a1d2b3c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561135057600080fd5b505af1158015611364573d6000803e3d6000fd5b505050506040513d602081101561137a57600080fd5b810190808051906020019092919050505090506001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632506855a6113e98484612219565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561141f57600080fd5b505af1158015611433573d6000803e3d6000fd5b50505050505b336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8160016000858152602001908152602001600020600101819055506114c842600660009054906101000a900465ffffffffffff16612235565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611740576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600060088190555033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60055481565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c6f707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160085414611a52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60075410611ae9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b6007600081546001019190508190559050816001600083815260200190815260200160002060000181905550826001600083815260200190815260200160002060010181905550836001600083815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611ba2426006809054906101000a900465ffffffffffff16612235565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff167f7e8881001566f9f89aedb9c5dc3d856a2b81e5235a8196413ed484be91cc0df682858560405180848152602001838152602001828152602001935050505060405180910390a29392505050565b60006020528060005260406000206000915090505481565b600160085414611ccf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c6f707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614158015611d795750426001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161080611d7857504260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff16105b5b611deb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c6f707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f196001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000858152602001908152602001600020600101546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611ee057600080fd5b505af1158015611ef4573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6006809054906101000a900465ffffffffffff1681565b60075481565b4260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff161061206f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c6f707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c6f707065722f6269642d616c72656164792d706c6163656400000000000081525060200191505060405180910390fd5b670de0b6b3a764000061214060055460016000858152602001908152602001600020600101546121ed565b8161214757fe5b04600160008381526020019081526020016000206001018190555061217f426006809054906101000a900465ffffffffffff16612235565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60008082148061220a575082828385029250828161220757fe5b04145b61221357600080fd5b92915050565b60008183111561222b5781905061222f565b8290505b92915050565b60008265ffffffffffff1682840191508165ffffffffffff16101561225957600080fd5b9291505056fea265627a7a723158205e1409f4f0c0165ca7346388d0afdcca6757261ff7f56d1c76a3df8267f2bd0664736f6c634300050c0032") + + syntax Bytes ::= "Flapper_bin" [macro] + // -------------------------------------- + rule Flapper_bin => #parseByteStack("0x6080604052670e92596fd6290000600455612a30600560006101000a81548165ffffffffffff021916908365ffffffffffff1602179055506202a300600560066101000a81548165ffffffffffff021916908365ffffffffffff160217905550600060065534801561007057600080fd5b506040516124dd3803806124dd8339818101604052604081101561009357600080fd5b81019080805190602001909291908051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160078190555050506123508061018d6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063957aa58c116100a2578063c959c42b11610071578063c959c42b14610479578063ca40c419146104a7578063cfc4af55146104f3578063cfdd330214610521578063fc7b6aee1461053f57610116565b8063957aa58c146103915780639c52a7f1146103af578063a2f91af2146103f3578063bf353dbb1461042157610116565b80634b43ed12116100e95780634b43ed12146102755780634e8b1dd5146102b757806365fae35e146102e55780637bd2bea7146103295780637d780d821461037357610116565b806326e027f11461011b57806329ae81141461014957806336569e77146101815780634423c5f1146101cb575b600080fd5b6101476004803603602081101561013157600080fd5b810190808035906020019092919050505061056d565b005b61017f6004803603604081101561015f57600080fd5b8101908080359060200190929190803590602001909291905050506108b4565b005b610189610ae7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101f7600480360360208110156101e157600080fd5b8101908080359060200190929190505050610b0d565b604051808681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018365ffffffffffff1665ffffffffffff1681526020018265ffffffffffff1665ffffffffffff1681526020019550505050505060405180910390f35b6102b56004803603606081101561028b57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610b87565b005b6102bf6113d1565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b610327600480360360208110156102fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113e9565b005b610331611517565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61037b61153d565b6040518082815260200191505060405180910390f35b610399611543565b6040518082815260200191505060405180910390f35b6103f1600480360360208110156103c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611549565b005b61041f6004803603602081101561040957600080fd5b8101908080359060200190929190505050611677565b005b6104636004803603602081101561043757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185e565b6040518082815260200191505060405180910390f35b6104a56004803603602081101561048f57600080fd5b8101908080359060200190929190505050611876565b005b6104dd600480360360408110156104bd57600080fd5b810190808035906020019092919080359060200190929190505050611cd7565b6040518082815260200191505060405180910390f35b6104fb6120d0565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b6105296120e8565b6040518082815260200191505060405180910390f35b61056b6004803603602081101561055557600080fd5b81019080803590602001909291905050506120ee565b005b6000600754146105e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f466c61707065722f7374696c6c2d6c697665000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156106be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c61707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b306001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156107e757600080fd5b505af11580156107fb573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610968576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7f626567000000000000000000000000000000000000000000000000000000000082141561099c5780600481905550610ab0565b7f74746c00000000000000000000000000000000000000000000000000000000008214156109ee5780600560006101000a81548165ffffffffffff021916908365ffffffffffff160217905550610aaf565b7f7461750000000000000000000000000000000000000000000000000000000000821415610a405780600560066101000a81548165ffffffffffff021916908365ffffffffffff160217905550610aae565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466c61707065722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900465ffffffffffff169080600201601a9054906101000a900465ffffffffffff16905085565b600160075414610bff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c61707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180610d46575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b610db8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c61707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1611610e5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c61707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600101548214610ee8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c61707065722f6c6f742d6e6f742d6d61746368696e67000000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548111610f73576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6269642d6e6f742d6869676865720000000000000000000081525060200191505060405180910390fd5b610f9560045460016000868152602001908152602001600020600001546122c5565b610fa782670de0b6b3a76400006122c5565b101561101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c61707065722f696e73756666696369656e742d696e63726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461121b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000888152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156111ad57600080fd5b505af11580156111c1573d6000803e3d6000fd5b50505050336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3330600160008881526020019081526020016000206000015485036040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b5050505080600160008581526020019081526020016000206000018190555061136142600560009054906101000a900465ffffffffffff166122f1565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600560009054906101000a900465ffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461149d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461172b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b6000600781905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3033846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561181057600080fd5b505af1158015611824573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b6001600754146118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16141580156119985750426001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16108061199757504260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff16105b5b611a0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c61707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b306001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600101546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611b3357600080fd5b505af1158015611b47573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac3060016000858152602001908152602001600020600001546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611c0a57600080fd5b505af1158015611c1e573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160075414611e05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60065410611e9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b6006600081546001019190508190559050816001600083815260200190815260200160002060000181905550826001600083815260200190815260200160002060010181905550336001600083815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f5642600560069054906101000a900465ffffffffffff166122f1565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561206b57600080fd5b505af115801561207f573d6000803e3d6000fd5b505050507fe6dde59cbc017becba89714a037778d234a84ce7f0a137487142a007e580d60981848460405180848152602001838152602001828152602001935050505060405180910390a192915050565b600560069054906101000a900465ffffffffffff1681565b60065481565b4260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1610612193576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c61707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614612239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c61707065722f6269642d616c72656164792d706c6163656400000000000081525060200191505060405180910390fd5b61225742600560069054906101000a900465ffffffffffff166122f1565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6000808214806122e257508282838502925082816122df57fe5b04145b6122eb57600080fd5b92915050565b60008265ffffffffffff1682840191508165ffffffffffff16101561231557600080fd5b9291505056fea265627a7a723158201acd0496ca3432003bac40639b3808573f9831f884ae4dc91d004d0deff68a7364736f6c634300050c0032") + + syntax Bytes ::= "Flapper_bin_runtime" [macro] + // ---------------------------------------------- + rule Flapper_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063957aa58c116100a2578063c959c42b11610071578063c959c42b14610479578063ca40c419146104a7578063cfc4af55146104f3578063cfdd330214610521578063fc7b6aee1461053f57610116565b8063957aa58c146103915780639c52a7f1146103af578063a2f91af2146103f3578063bf353dbb1461042157610116565b80634b43ed12116100e95780634b43ed12146102755780634e8b1dd5146102b757806365fae35e146102e55780637bd2bea7146103295780637d780d821461037357610116565b806326e027f11461011b57806329ae81141461014957806336569e77146101815780634423c5f1146101cb575b600080fd5b6101476004803603602081101561013157600080fd5b810190808035906020019092919050505061056d565b005b61017f6004803603604081101561015f57600080fd5b8101908080359060200190929190803590602001909291905050506108b4565b005b610189610ae7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101f7600480360360208110156101e157600080fd5b8101908080359060200190929190505050610b0d565b604051808681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018365ffffffffffff1665ffffffffffff1681526020018265ffffffffffff1665ffffffffffff1681526020019550505050505060405180910390f35b6102b56004803603606081101561028b57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610b87565b005b6102bf6113d1565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b610327600480360360208110156102fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113e9565b005b610331611517565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61037b61153d565b6040518082815260200191505060405180910390f35b610399611543565b6040518082815260200191505060405180910390f35b6103f1600480360360208110156103c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611549565b005b61041f6004803603602081101561040957600080fd5b8101908080359060200190929190505050611677565b005b6104636004803603602081101561043757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185e565b6040518082815260200191505060405180910390f35b6104a56004803603602081101561048f57600080fd5b8101908080359060200190929190505050611876565b005b6104dd600480360360408110156104bd57600080fd5b810190808035906020019092919080359060200190929190505050611cd7565b6040518082815260200191505060405180910390f35b6104fb6120d0565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b6105296120e8565b6040518082815260200191505060405180910390f35b61056b6004803603602081101561055557600080fd5b81019080803590602001909291905050506120ee565b005b6000600754146105e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f466c61707065722f7374696c6c2d6c697665000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156106be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c61707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b306001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156107e757600080fd5b505af11580156107fb573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610968576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b7f626567000000000000000000000000000000000000000000000000000000000082141561099c5780600481905550610ab0565b7f74746c00000000000000000000000000000000000000000000000000000000008214156109ee5780600560006101000a81548165ffffffffffff021916908365ffffffffffff160217905550610aaf565b7f7461750000000000000000000000000000000000000000000000000000000000821415610a405780600560066101000a81548165ffffffffffff021916908365ffffffffffff160217905550610aae565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f466c61707065722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900465ffffffffffff169080600201601a9054906101000a900465ffffffffffff16905085565b600160075414610bff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f466c61707065722f6775792d6e6f742d7365740000000000000000000000000081525060200191505060405180910390fd5b426001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff161180610d46575060006001600085815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16145b610db8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c61707065722f616c72656164792d66696e69736865642d7469630000000081525060200191505060405180910390fd5b4260016000858152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1611610e5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f466c61707065722f616c72656164792d66696e69736865642d656e640000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600101548214610ee8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f466c61707065722f6c6f742d6e6f742d6d61746368696e67000000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600001548111610f73576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6269642d6e6f742d6869676865720000000000000000000081525060200191505060405180910390fd5b610f9560045460016000868152602001908152602001600020600001546122c5565b610fa782670de0b6b3a76400006122c5565b101561101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f466c61707065722f696e73756666696369656e742d696e63726561736500000081525060200191505060405180910390fd5b6001600084815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461121b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b336001600087815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000888152602001908152602001600020600001546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156111ad57600080fd5b505af11580156111c1573d6000803e3d6000fd5b50505050336001600085815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3330600160008881526020019081526020016000206000015485036040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b5050505080600160008581526020019081526020016000206000018190555061136142600560009054906101000a900465ffffffffffff166122f1565b6001600085815260200190815260200160002060020160146101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600560009054906101000a900465ffffffffffff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461149d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60075481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461172b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b6000600781905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3033846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561181057600080fd5b505af1158015611824573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b6001600754146118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16141580156119985750426001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff16108061199757504260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff16105b5b611a0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c61707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b306001600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000868152602001908152602001600020600101546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611b3357600080fd5b505af1158015611b47573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac3060016000858152602001908152602001600020600001546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611c0a57600080fd5b505af1158015611c1e573d6000803e3d6000fd5b505050506001600082815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549065ffffffffffff021916905560028201601a6101000a81549065ffffffffffff021916905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f466c61707065722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160075414611e05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60065410611e9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f466c61707065722f6f766572666c6f770000000000000000000000000000000081525060200191505060405180910390fd5b6006600081546001019190508190559050816001600083815260200190815260200160002060000181905550826001600083815260200190815260200160002060010181905550336001600083815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f5642600560069054906101000a900465ffffffffffff166122f1565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561206b57600080fd5b505af115801561207f573d6000803e3d6000fd5b505050507fe6dde59cbc017becba89714a037778d234a84ce7f0a137487142a007e580d60981848460405180848152602001838152602001828152602001935050505060405180910390a192915050565b600560069054906101000a900465ffffffffffff1681565b60065481565b4260016000838152602001908152602001600020600201601a9054906101000a900465ffffffffffff1665ffffffffffff1610612193576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f466c61707065722f6e6f742d66696e697368656400000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060020160149054906101000a900465ffffffffffff1665ffffffffffff1614612239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f466c61707065722f6269642d616c72656164792d706c6163656400000000000081525060200191505060405180910390fd5b61225742600560069054906101000a900465ffffffffffff166122f1565b60016000838152602001908152602001600020600201601a6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b6000808214806122e257508282838502925082816122df57fe5b04145b6122eb57600080fd5b92915050565b60008265ffffffffffff1682840191508165ffffffffffff16101561231557600080fd5b9291505056fea265627a7a723158201acd0496ca3432003bac40639b3808573f9831f884ae4dc91d004d0deff68a7364736f6c634300050c0032") + + syntax Bytes ::= "DSToken_bin" [macro] + // -------------------------------------- + rule DSToken_bin => #parseByteStack("0x60806040526012600655600060075534801561001a57600080fd5b5060405161241f38038061241f8339818101604052602081101561003d57600080fd5b8101908080519060200190929190505050600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806000819055505033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a280600581905550506122e8806101376000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80637a9e5e4b116100de578063b753a98c11610097578063bf7e214f11610071578063bf7e214f14610684578063daea85c5146106ce578063dd62ed3e1461072a578063f2d5d56b146107a257610173565b8063b753a98c146105be578063bb35783b1461060c578063be9a65551461067a57610173565b80637a9e5e4b146104305780638da5cb5b1461047457806395d89b41146104be5780639dc29fac146104dc578063a0712d681461052a578063a9059cbb1461055857610173565b8063313ce56711610130578063313ce567146102ee57806340c10f191461030c57806342966c681461035a5780635ac801fe1461038857806370a08231146103b657806375f12b211461040e57610173565b806306fdde031461017857806307da68f514610196578063095ea7b3146101a057806313af40351461020657806318160ddd1461024a57806323b872dd14610268575b600080fd5b6101806107f0565b6040518082815260200191505060405180910390f35b61019e6107f6565b005b6101ec600480360360408110156101b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610970565b604051808215151515815260200191505060405180910390f35b6102486004803603602081101561021c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a07565b005b610252610b50565b6040518082815260200191505060405180910390f35b6102d46004803603606081101561027e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b59565b604051808215151515815260200191505060405180910390f35b6102f66110f1565b6040518082815260200191505060405180910390f35b6103586004803603604081101561032257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110f7565b005b6103866004803603602081101561037057600080fd5b810190808035906020019092919050505061130a565b005b6103b46004803603602081101561039e57600080fd5b8101908080359060200190929190505050611317565b005b6103f8600480360360208110156103cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113c1565b6040518082815260200191505060405180910390f35b61041661140a565b604051808215151515815260200191505060405180910390f35b6104726004803603602081101561044657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061141d565b005b61047c611566565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104c661158c565b6040518082815260200191505060405180910390f35b610528600480360360408110156104f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611592565b005b6105566004803603602081101561054057600080fd5b8101908080359060200190929190505050611b30565b005b6105a46004803603604081101561056e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b3d565b604051808215151515815260200191505060405180910390f35b61060a600480360360408110156105d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b52565b005b6106786004803603606081101561062257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b62565b005b610682611b73565b005b61068c611ced565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610710600480360360208110156106e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d13565b604051808215151515815260200191505060405180910390f35b61078c6004803603604081101561074057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dc9565b6040518082815260200191505060405180910390f35b6107ee600480360360408110156107b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e50565b005b60075481565b610824336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b610896576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46001600460146101000a81548160ff021916908315150217905550505050565b6000600460149054906101000a900460ff16156109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b6109ff83836120bb565b905092915050565b610a35336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b610aa7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615610bde576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610cb657507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15610eb45781600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610dad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f64732d746f6b656e2d696e73756666696369656e742d617070726f76616c000081525060200191505060405180910390fd5b610e33600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836121ad565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610f69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f64732d746f6b656e2d696e73756666696369656e742d62616c616e636500000081525060200191505060405180910390fd5b610fb2600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836121ad565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061103e600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612230565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b60065481565b611125336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b611197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b600460149054906101000a900460ff161561121a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b611263600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612230565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112b260005482612230565b6000819055508173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040518082815260200191505060405180910390a25050565b6113143382611592565b50565b611345336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b6113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b61144b336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b6114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6115c0336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b611632576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b600460149054906101000a900460ff16156116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561178d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b1561198b5780600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f64732d746f6b656e2d696e73756666696369656e742d617070726f76616c000081525060200191505060405180910390fd5b61190a600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826121ad565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611a40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f64732d746f6b656e2d696e73756666696369656e742d62616c616e636500000081525060200191505060405180910390fd5b611a89600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826121ad565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ad8600054826121ad565b6000819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a25050565b611b3a33826110f7565b50565b6000611b4a338484610b59565b905092915050565b611b5d338383610b59565b505050565b611b6d838383610b59565b50505050565b611ba1336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b611c13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46000600460146101000a81548160ff021916908315150217905550505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460149054906101000a900460ff1615611d98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b611dc2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6120bb565b9050919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e5b823383610b59565b505050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e9f57600190506120b5565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611efe57600190506120b5565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f5e57600090506120b5565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561207757600080fd5b505afa15801561208b573d6000803e3d6000fd5b505050506040513d60208110156120a157600080fd5b810190808051906020019092919050505090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600082828403915081111561222a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b60008282840191508110156122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b9291505056fea265627a7a7231582042e4b52e52d434217b55a1ee90f412a7c49b1fd0406bb9ec1168e2a7c1fbad0e64736f6c634300050c0032") + + syntax Bytes ::= "DSToken_bin_runtime" [macro] + // ---------------------------------------------- + rule DSToken_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106101735760003560e01c80637a9e5e4b116100de578063b753a98c11610097578063bf7e214f11610071578063bf7e214f14610684578063daea85c5146106ce578063dd62ed3e1461072a578063f2d5d56b146107a257610173565b8063b753a98c146105be578063bb35783b1461060c578063be9a65551461067a57610173565b80637a9e5e4b146104305780638da5cb5b1461047457806395d89b41146104be5780639dc29fac146104dc578063a0712d681461052a578063a9059cbb1461055857610173565b8063313ce56711610130578063313ce567146102ee57806340c10f191461030c57806342966c681461035a5780635ac801fe1461038857806370a08231146103b657806375f12b211461040e57610173565b806306fdde031461017857806307da68f514610196578063095ea7b3146101a057806313af40351461020657806318160ddd1461024a57806323b872dd14610268575b600080fd5b6101806107f0565b6040518082815260200191505060405180910390f35b61019e6107f6565b005b6101ec600480360360408110156101b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610970565b604051808215151515815260200191505060405180910390f35b6102486004803603602081101561021c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a07565b005b610252610b50565b6040518082815260200191505060405180910390f35b6102d46004803603606081101561027e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b59565b604051808215151515815260200191505060405180910390f35b6102f66110f1565b6040518082815260200191505060405180910390f35b6103586004803603604081101561032257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110f7565b005b6103866004803603602081101561037057600080fd5b810190808035906020019092919050505061130a565b005b6103b46004803603602081101561039e57600080fd5b8101908080359060200190929190505050611317565b005b6103f8600480360360208110156103cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113c1565b6040518082815260200191505060405180910390f35b61041661140a565b604051808215151515815260200191505060405180910390f35b6104726004803603602081101561044657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061141d565b005b61047c611566565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104c661158c565b6040518082815260200191505060405180910390f35b610528600480360360408110156104f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611592565b005b6105566004803603602081101561054057600080fd5b8101908080359060200190929190505050611b30565b005b6105a46004803603604081101561056e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b3d565b604051808215151515815260200191505060405180910390f35b61060a600480360360408110156105d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b52565b005b6106786004803603606081101561062257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b62565b005b610682611b73565b005b61068c611ced565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610710600480360360208110156106e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d13565b604051808215151515815260200191505060405180910390f35b61078c6004803603604081101561074057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dc9565b6040518082815260200191505060405180910390f35b6107ee600480360360408110156107b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e50565b005b60075481565b610824336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b610896576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46001600460146101000a81548160ff021916908315150217905550505050565b6000600460149054906101000a900460ff16156109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b6109ff83836120bb565b905092915050565b610a35336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b610aa7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008054905090565b6000600460149054906101000a900460ff1615610bde576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610cb657507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15610eb45781600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610dad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f64732d746f6b656e2d696e73756666696369656e742d617070726f76616c000081525060200191505060405180910390fd5b610e33600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836121ad565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610f69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f64732d746f6b656e2d696e73756666696369656e742d62616c616e636500000081525060200191505060405180910390fd5b610fb2600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836121ad565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061103e600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612230565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b60065481565b611125336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b611197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b600460149054906101000a900460ff161561121a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b611263600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612230565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112b260005482612230565b6000819055508173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040518082815260200191505060405180910390a25050565b6113143382611592565b50565b611345336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b6113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460149054906101000a900460ff1681565b61144b336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b6114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6115c0336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b611632576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b600460149054906101000a900460ff16156116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561178d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b1561198b5780600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f64732d746f6b656e2d696e73756666696369656e742d617070726f76616c000081525060200191505060405180910390fd5b61190a600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826121ad565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611a40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f64732d746f6b656e2d696e73756666696369656e742d62616c616e636500000081525060200191505060405180910390fd5b611a89600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826121ad565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ad8600054826121ad565b6000819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a25050565b611b3a33826110f7565b50565b6000611b4a338484610b59565b905092915050565b611b5d338383610b59565b505050565b611b6d838383610b59565b50505050565b611ba1336000357fffffffff0000000000000000000000000000000000000000000000000000000016611e60565b611c13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46000600460146101000a81548160ff021916908315150217905550505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460149054906101000a900460ff1615611d98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64732d73746f702d69732d73746f70706564000000000000000000000000000081525060200191505060405180910390fd5b611dc2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6120bb565b9050919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e5b823383610b59565b505050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e9f57600190506120b5565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611efe57600190506120b5565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f5e57600090506120b5565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b15801561207757600080fd5b505afa15801561208b573d6000803e3d6000fd5b505050506040513d60208110156120a157600080fd5b810190808051906020019092919050505090505b92915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600082828403915081111561222a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b60008282840191508110156122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b9291505056fea265627a7a7231582042e4b52e52d434217b55a1ee90f412a7c49b1fd0406bb9ec1168e2a7c1fbad0e64736f6c634300050c0032") + + syntax Bytes ::= "End_bin" [macro] + // ---------------------------------- + rule End_bin => #parseByteStack("0x608060405234801561001057600080fd5b5060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600681905550613a458061006c6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806389ea45d311610104578063d4e8be83116100a2578063e488181311610071578063e48818131461076a578063e6ee62aa146107b4578063ee6447b5146107f6578063fe8507c614610838576101cf565b8063d4e8be831461068e578063e1340a3d146106dc578063e2702fdc1461071e578063e2b0caef1461074c576101cf565b80639c52a7f1116100de5780639c52a7f114610562578063bf353dbb146105a6578063c83062c6146105fe578063c939ebfc1461062c576101cf565b806389ea45d31461049e5780639255f809146104ec578063957aa58c14610544576101cf565b8063626cb3c51161017157806365fae35e1161014b57806365fae35e146103d8578063692450091461041c5780636ea42555146104265780636f265b9314610454576101cf565b8063626cb3c51461032e57806363fad85e1461037857806364bd7013146103ba576101cf565b80634a10eaa6116101ad5780634a10eaa6146102745780634ba2363a146102a2578063503ecf06146102ec5780635920375c14610324576101cf565b80630dca59c1146101d457806329ae8114146101f257806336569e771461022a575b600080fd5b6101dc610870565b6040518082815260200191505060405180910390f35b6102286004803603604081101561020857600080fd5b810190808035906020019092919080359060200190929190505050610876565b005b610232610a7b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102a06004803603602081101561028a57600080fd5b8101908080359060200190929190505050610aa1565b005b6102aa610d4c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103226004803603604081101561030257600080fd5b810190808035906020019092919080359060200190929190505050610d72565b005b61032c611665565b005b610336611a29565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a46004803603602081101561038e57600080fd5b8101908080359060200190929190505050611a4f565b6040518082815260200191505060405180910390f35b6103c2611a67565b6040518082815260200191505060405180910390f35b61041a600480360360208110156103ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a6d565b005b610424611b9b565b005b6104526004803603602081101561043c57600080fd5b8101908080359060200190929190505050611f95565b005b61045c6121fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104ea600480360360408110156104b457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612222565b005b61052e6004803603602081101561050257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612754565b6040518082815260200191505060405180910390f35b61054c61276c565b6040518082815260200191505060405180910390f35b6105a46004803603602081101561057857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612772565b005b6105e8600480360360208110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128a0565b6040518082815260200191505060405180910390f35b61062a6004803603602081101561061457600080fd5b81019080803590602001909291905050506128b8565b005b6106786004803603604081101561064257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cc7565b6040518082815260200191505060405180910390f35b6106da600480360360408110156106a457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cec565b005b610708600480360360208110156106f257600080fd5b81019080803590602001909291905050506130e7565b6040518082815260200191505060405180910390f35b61074a6004803603602081101561073457600080fd5b81019080803590602001909291905050506130ff565b005b610754613536565b6040518082815260200191505060405180910390f35b61077261353c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107e0600480360360208110156107ca57600080fd5b8101908080359060200190929190505050613562565b6040518082815260200191505060405180910390f35b6108226004803603602081101561080c57600080fd5b810190808035906020019092919050505061357a565b6040518082815260200191505060405180910390f35b61086e6004803603604081101561084e57600080fd5b810190808035906020019092919080359060200190929190505050613592565b005b60095481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461092a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600654146109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f77616974000000000000000000000000000000000000000000000000000000008214156109d65780600881905550610a44565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009541415610b1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f456e642f646562742d7a65726f0000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600d60008381526020019081526020016000205414610ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f6669782d696c6b2d616c72656164792d646566696e6564000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36836040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b505050506040513d60a0811015610c4457600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050505050509150506000610cbe610ca5600c6000868152602001908152602001600020548461391f565b600a60008681526020019081526020016000205461391f565b9050610cfd610cf5610ce383600b600088815260200190815260200160002054613948565b6b033b2e3c9fd0803ce8000000613962565b60095461398e565b600d60008581526020019081526020016000208190555050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a6000848152602001908152602001600020541415610dfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f456e642f7461672d696c6b2d6e6f742d646566696e656400000000000000000081525060200191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36846040518263ffffffff1660e01b815260040180828152602001915050606060405180830381600087803b158015610e7357600080fd5b505af1158015610e87573d6000803e3d6000fd5b505050506040513d6060811015610e9d57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050905060008190506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36866040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b158015610f4257600080fd5b505af1158015610f56573d6000803e3d6000fd5b505050506040513d60a0811015610f6c57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050505050509150506000806000808573ffffffffffffffffffffffffffffffffffffffff16634423c5f1896040518263ffffffff1660e01b8152600401808281526020019150506101006040518083038186803b15801561100357600080fd5b505afa158015611017573d6000803e3d6000fd5b505050506040513d61010081101561102e57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050975050965050505093509350600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156111b257600080fd5b505af11580156111c6573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156112c957600080fd5b505af11580156112dd573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561138257600080fd5b505af1158015611396573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff166326e027f1896040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156113ed57600080fd5b505af1158015611401573d6000803e3d6000fd5b50505050600085828161141057fe5b049050611430600c60008c815260200190815260200160002054826139b7565b600c60008c81526020019081526020016000208190555060008412158015611459575060008112155b6114cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f408b8530600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689876040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b15801561160e57600080fd5b505af1158015611622573d6000803e3d6000fd5b5050505050505050505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b6000600654146116dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f456e642f7374696c6c2d6c69766500000000000000000000000000000000000081525060200191505060405180910390fd5b600060095414611755576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f456e642f646562742d6e6f742d7a65726f00000000000000000000000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561181857600080fd5b505afa15801561182c573d6000803e3d6000fd5b505050506040513d602081101561184257600080fd5b8101908080519060200190929190505050146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f456e642f737572706c75732d6e6f742d7a65726f00000000000000000000000081525060200191505060405180910390fd5b6118d46007546008546139b7565b421015611949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f456e642f776169742d6e6f742d66696e6973686564000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dca59c16040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156119b357600080fd5b505af11580156119c7573d6000803e3d6000fd5b505050506040513d60208110156119dd57600080fd5b81019080805190602001909291905050506009819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d6020528060005260406000206000915090505481565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611b21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611c4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600160065414611cc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b600060068190555042600781905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611dc257600080fd5b505af1158015611dd6573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e4457600080fd5b505af1158015611e58573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ec657600080fd5b505af1158015611eda573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611f4857600080fd5b505af1158015611f5c573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b6000600954141561200e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f456e642f646562742d7a65726f0000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b33600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612086856b033b2e3c9fd0803ce8000000613962565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561212257600080fd5b505af1158015612136573d6000803e3d6000fd5b50505050612183600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139b7565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60008481526020019081526020016000205414156122ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f456e642f7461672d696c6b2d6e6f742d646566696e656400000000000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36846040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b15801561232357600080fd5b505af1158015612337573d6000803e3d6000fd5b505050506040513d60a081101561234d57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050505050915050600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632424be5c86866040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506040805180830381600087803b15801561243757600080fd5b505af115801561244b573d6000803e3d6000fd5b505050506040513d604081101561246157600080fd5b8101908080519060200190929190805190602001909291905050509150915060006124a861248f838661391f565b600a60008981526020019081526020016000205461391f565b905060006124b684836139d1565b90506124de600b6000898152602001908152602001600020546124d98484613948565b6139b7565b600b6000898152602001908152602001600020819055507f8000000000000000000000000000000000000000000000000000000000000000811115801561254557507f80000000000000000000000000000000000000000000000000000000000000008311155b6125b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f40888830600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686600003896000036040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b15801561270057600080fd5b505af1158015612714573d6000803e3d6000fd5b5050505050505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600e6020528060005260406000206000915090505481565b60065481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612826576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b600060065414612930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f456e642f7374696c6c2d6c69766500000000000000000000000000000000000081525060200191505060405180910390fd5b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632424be5c84336040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506040805180830381600087803b1580156129db57600080fd5b505af11580156129ef573d6000803e3d6000fd5b505050506040513d6040811015612a0557600080fd5b8101908080519060200190929190805190602001909291905050509150915060008114612a9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f456e642f6172742d6e6f742d7a65726f0000000000000000000000000000000081525060200191505060405180910390fd5b7f8000000000000000000000000000000000000000000000000000000000000000821115612b30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f40843333600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168760000360006040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b158015612c7757600080fd5b505af1158015612c8b573d6000803e3d6000fd5b5050505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600f602052816000526040600020602052806000526040600020600091509150505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600160065414612e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f7661740000000000000000000000000000000000000000000000000000000000821415612e865780600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130b0565b7f6361740000000000000000000000000000000000000000000000000000000000821415612ef45780600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130af565b7f766f770000000000000000000000000000000000000000000000000000000000821415612f625780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130ae565b7f706f740000000000000000000000000000000000000000000000000000000000821415612fd05780600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130ad565b7f73706f740000000000000000000000000000000000000000000000000000000082141561303e5780600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130ac565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600c6020528060005260406000206000915090505481565b600060065414613177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f456e642f7374696c6c2d6c69766500000000000000000000000000000000000081525060200191505060405180910390fd5b6000600a60008381526020019081526020016000205414613200576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f7461672d696c6b2d616c72656164792d646566696e6564000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36826040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b15801561327557600080fd5b505af1158015613289573d6000803e3d6000fd5b505050506040513d60a081101561329f57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090919250909150905050600c600083815260200190815260200160002060008291905055506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36836040518263ffffffff1660e01b815260040180828152602001915050604080518083038186803b15801561337157600080fd5b505afa158015613385573d6000803e3d6000fd5b505050506040513d604081101561339b57600080fd5b8101908080519060200190929190805190602001909291905050505090506134e8600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663495d32cb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561342457600080fd5b505afa158015613438573d6000803e3d6000fd5b505050506040513d602081101561344e57600080fd5b81019080805190602001909291905050508273ffffffffffffffffffffffffffffffffffffffff166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b1580156134a557600080fd5b505afa1580156134b9573d6000803e3d6000fd5b505050506040513d60208110156134cf57600080fd5b810190808051906020019092919050505060001c6139eb565b600a600084815260200190815260200160002081905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60075481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b6000600d600084815260200190815260200160002054141561361c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f456e642f6669782d696c6b2d6e6f742d646566696e656400000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e83303361367a86600d60008a81526020019081526020016000205461391f565b6040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561371d57600080fd5b505af1158015613731573d6000803e3d6000fd5b5050505061378f600f600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139b7565b600f600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156138e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f456e642f696e73756666696369656e742d6261672d62616c616e63650000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60006b033b2e3c9fd0803ce80000006139388484613962565b8161393f57fe5b04905092915050565b600082828403915081111561395c57600080fd5b92915050565b60008082148061397f575082828385029250828161397c57fe5b04145b61398857600080fd5b92915050565b6000816139a7846b033b2e3c9fd0803ce8000000613962565b816139ae57fe5b04905092915050565b60008183019050828110156139cb57600080fd5b92915050565b6000818311156139e157816139e3565b825b905092915050565b600081613a0084670de0b6b3a7640000613962565b81613a0757fe5b0490509291505056fea265627a7a72315820264a0ce72bca160075b6a5de4f272b4d2dd05f4166ae5536ffb13338378412bc64736f6c634300050c0032") + + syntax Bytes ::= "End_bin_runtime" [macro] + // ------------------------------------------ + rule End_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806389ea45d311610104578063d4e8be83116100a2578063e488181311610071578063e48818131461076a578063e6ee62aa146107b4578063ee6447b5146107f6578063fe8507c614610838576101cf565b8063d4e8be831461068e578063e1340a3d146106dc578063e2702fdc1461071e578063e2b0caef1461074c576101cf565b80639c52a7f1116100de5780639c52a7f114610562578063bf353dbb146105a6578063c83062c6146105fe578063c939ebfc1461062c576101cf565b806389ea45d31461049e5780639255f809146104ec578063957aa58c14610544576101cf565b8063626cb3c51161017157806365fae35e1161014b57806365fae35e146103d8578063692450091461041c5780636ea42555146104265780636f265b9314610454576101cf565b8063626cb3c51461032e57806363fad85e1461037857806364bd7013146103ba576101cf565b80634a10eaa6116101ad5780634a10eaa6146102745780634ba2363a146102a2578063503ecf06146102ec5780635920375c14610324576101cf565b80630dca59c1146101d457806329ae8114146101f257806336569e771461022a575b600080fd5b6101dc610870565b6040518082815260200191505060405180910390f35b6102286004803603604081101561020857600080fd5b810190808035906020019092919080359060200190929190505050610876565b005b610232610a7b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102a06004803603602081101561028a57600080fd5b8101908080359060200190929190505050610aa1565b005b6102aa610d4c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103226004803603604081101561030257600080fd5b810190808035906020019092919080359060200190929190505050610d72565b005b61032c611665565b005b610336611a29565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a46004803603602081101561038e57600080fd5b8101908080359060200190929190505050611a4f565b6040518082815260200191505060405180910390f35b6103c2611a67565b6040518082815260200191505060405180910390f35b61041a600480360360208110156103ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a6d565b005b610424611b9b565b005b6104526004803603602081101561043c57600080fd5b8101908080359060200190929190505050611f95565b005b61045c6121fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104ea600480360360408110156104b457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612222565b005b61052e6004803603602081101561050257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612754565b6040518082815260200191505060405180910390f35b61054c61276c565b6040518082815260200191505060405180910390f35b6105a46004803603602081101561057857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612772565b005b6105e8600480360360208110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128a0565b6040518082815260200191505060405180910390f35b61062a6004803603602081101561061457600080fd5b81019080803590602001909291905050506128b8565b005b6106786004803603604081101561064257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cc7565b6040518082815260200191505060405180910390f35b6106da600480360360408110156106a457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cec565b005b610708600480360360208110156106f257600080fd5b81019080803590602001909291905050506130e7565b6040518082815260200191505060405180910390f35b61074a6004803603602081101561073457600080fd5b81019080803590602001909291905050506130ff565b005b610754613536565b6040518082815260200191505060405180910390f35b61077261353c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107e0600480360360208110156107ca57600080fd5b8101908080359060200190929190505050613562565b6040518082815260200191505060405180910390f35b6108226004803603602081101561080c57600080fd5b810190808035906020019092919050505061357a565b6040518082815260200191505060405180910390f35b61086e6004803603604081101561084e57600080fd5b810190808035906020019092919080359060200190929190505050613592565b005b60095481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461092a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6001600654146109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f77616974000000000000000000000000000000000000000000000000000000008214156109d65780600881905550610a44565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009541415610b1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f456e642f646562742d7a65726f0000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600d60008381526020019081526020016000205414610ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f6669782d696c6b2d616c72656164792d646566696e6564000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36836040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b505050506040513d60a0811015610c4457600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050505050509150506000610cbe610ca5600c6000868152602001908152602001600020548461391f565b600a60008681526020019081526020016000205461391f565b9050610cfd610cf5610ce383600b600088815260200190815260200160002054613948565b6b033b2e3c9fd0803ce8000000613962565b60095461398e565b600d60008581526020019081526020016000208190555050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a6000848152602001908152602001600020541415610dfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f456e642f7461672d696c6b2d6e6f742d646566696e656400000000000000000081525060200191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36846040518263ffffffff1660e01b815260040180828152602001915050606060405180830381600087803b158015610e7357600080fd5b505af1158015610e87573d6000803e3d6000fd5b505050506040513d6060811015610e9d57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050905060008190506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36866040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b158015610f4257600080fd5b505af1158015610f56573d6000803e3d6000fd5b505050506040513d60a0811015610f6c57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050505050509150506000806000808573ffffffffffffffffffffffffffffffffffffffff16634423c5f1896040518263ffffffff1660e01b8152600401808281526020019150506101006040518083038186803b15801561100357600080fd5b505afa158015611017573d6000803e3d6000fd5b505050506040513d61010081101561102e57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050975050965050505093509350600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156111b257600080fd5b505af11580156111c6573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24e23eb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156112c957600080fd5b505af11580156112dd573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561138257600080fd5b505af1158015611396573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff166326e027f1896040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156113ed57600080fd5b505af1158015611401573d6000803e3d6000fd5b50505050600085828161141057fe5b049050611430600c60008c815260200190815260200160002054826139b7565b600c60008c81526020019081526020016000208190555060008412158015611459575060008112155b6114cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f408b8530600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689876040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b15801561160e57600080fd5b505af1158015611622573d6000803e3d6000fd5b5050505050505050505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b6000600654146116dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f456e642f7374696c6c2d6c69766500000000000000000000000000000000000081525060200191505060405180910390fd5b600060095414611755576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f456e642f646562742d6e6f742d7a65726f00000000000000000000000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c25b346600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561181857600080fd5b505afa15801561182c573d6000803e3d6000fd5b505050506040513d602081101561184257600080fd5b8101908080519060200190929190505050146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f456e642f737572706c75732d6e6f742d7a65726f00000000000000000000000081525060200191505060405180910390fd5b6118d46007546008546139b7565b421015611949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f456e642f776169742d6e6f742d66696e6973686564000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dca59c16040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156119b357600080fd5b505af11580156119c7573d6000803e3d6000fd5b505050506040513d60208110156119dd57600080fd5b81019080805190602001909291905050506009819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d6020528060005260406000206000915090505481565b60085481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611b21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611c4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600160065414611cc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b600060068190555042600781905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611dc257600080fd5b505af1158015611dd6573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e4457600080fd5b505af1158015611e58573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ec657600080fd5b505af1158015611eda573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611f4857600080fd5b505af1158015611f5c573d6000803e3d6000fd5b505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b6000600954141561200e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f456e642f646562742d7a65726f0000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb35783b33600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612086856b033b2e3c9fd0803ce8000000613962565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561212257600080fd5b505af1158015612136573d6000803e3d6000fd5b50505050612183600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139b7565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60008481526020019081526020016000205414156122ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f456e642f7461672d696c6b2d6e6f742d646566696e656400000000000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36846040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b15801561232357600080fd5b505af1158015612337573d6000803e3d6000fd5b505050506040513d60a081101561234d57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050505050915050600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632424be5c86866040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506040805180830381600087803b15801561243757600080fd5b505af115801561244b573d6000803e3d6000fd5b505050506040513d604081101561246157600080fd5b8101908080519060200190929190805190602001909291905050509150915060006124a861248f838661391f565b600a60008981526020019081526020016000205461391f565b905060006124b684836139d1565b90506124de600b6000898152602001908152602001600020546124d98484613948565b6139b7565b600b6000898152602001908152602001600020819055507f8000000000000000000000000000000000000000000000000000000000000000811115801561254557507f80000000000000000000000000000000000000000000000000000000000000008311155b6125b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f40888830600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686600003896000036040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b15801561270057600080fd5b505af1158015612714573d6000803e3d6000fd5b5050505050505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600e6020528060005260406000206000915090505481565b60065481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612826576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b600060065414612930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f456e642f7374696c6c2d6c69766500000000000000000000000000000000000081525060200191505060405180910390fd5b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632424be5c84336040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506040805180830381600087803b1580156129db57600080fd5b505af11580156129ef573d6000803e3d6000fd5b505050506040513d6040811015612a0557600080fd5b8101908080519060200190929190805190602001909291905050509150915060008114612a9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f456e642f6172742d6e6f742d7a65726f0000000000000000000000000000000081525060200191505060405180910390fd5b7f8000000000000000000000000000000000000000000000000000000000000000821115612b30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637bab3f40843333600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168760000360006040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019650505050505050600060405180830381600087803b158015612c7757600080fd5b505af1158015612c8b573d6000803e3d6000fd5b5050505050505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b600f602052816000526040600020602052806000526040600020600091509150505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f456e642f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b600160065414612e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f456e642f6e6f742d6c697665000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f7661740000000000000000000000000000000000000000000000000000000000821415612e865780600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130b0565b7f6361740000000000000000000000000000000000000000000000000000000000821415612ef45780600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130af565b7f766f770000000000000000000000000000000000000000000000000000000000821415612f625780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130ae565b7f706f740000000000000000000000000000000000000000000000000000000000821415612fd05780600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130ad565b7f73706f740000000000000000000000000000000000000000000000000000000082141561303e5780600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506130ac565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b5b5b5b5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600c6020528060005260406000206000915090505481565b600060065414613177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f456e642f7374696c6c2d6c69766500000000000000000000000000000000000081525060200191505060405180910390fd5b6000600a60008381526020019081526020016000205414613200576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f456e642f7461672d696c6b2d616c72656164792d646566696e6564000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36826040518263ffffffff1660e01b81526004018082815260200191505060a060405180830381600087803b15801561327557600080fd5b505af1158015613289573d6000803e3d6000fd5b505050506040513d60a081101561329f57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090919250909150905050600c600083815260200190815260200160002060008291905055506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9638d36836040518263ffffffff1660e01b815260040180828152602001915050604080518083038186803b15801561337157600080fd5b505afa158015613385573d6000803e3d6000fd5b505050506040513d604081101561339b57600080fd5b8101908080519060200190929190805190602001909291905050505090506134e8600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663495d32cb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561342457600080fd5b505afa158015613438573d6000803e3d6000fd5b505050506040513d602081101561344e57600080fd5b81019080805190602001909291905050508273ffffffffffffffffffffffffffffffffffffffff166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b1580156134a557600080fd5b505afa1580156134b9573d6000803e3d6000fd5b505050506040513d60208110156134cf57600080fd5b810190808051906020019092919050505060001c6139eb565b600a600084815260200190815260200160002081905550505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60075481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b6000600d600084815260200190815260200160002054141561361c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f456e642f6669782d696c6b2d6e6f742d646566696e656400000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636111be2e83303361367a86600d60008a81526020019081526020016000205461391f565b6040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b15801561371d57600080fd5b505af1158015613731573d6000803e3d6000fd5b5050505061378f600f600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139b7565b600f600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156138e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f456e642f696e73756666696369656e742d6261672d62616c616e63650000000081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b60006b033b2e3c9fd0803ce80000006139388484613962565b8161393f57fe5b04905092915050565b600082828403915081111561395c57600080fd5b92915050565b60008082148061397f575082828385029250828161397c57fe5b04145b61398857600080fd5b92915050565b6000816139a7846b033b2e3c9fd0803ce8000000613962565b816139ae57fe5b04905092915050565b60008183019050828110156139cb57600080fd5b92915050565b6000818311156139e157816139e3565b825b905092915050565b600081613a0084670de0b6b3a7640000613962565b81613a0757fe5b0490509291505056fea265627a7a72315820264a0ce72bca160075b6a5de4f272b4d2dd05f4166ae5536ffb13338378412bc64736f6c634300050c0032") + + syntax Bytes ::= "DSValue_bin" [macro] + // -------------------------------------- + rule DSValue_bin => #parseByteStack("0x608060405233600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a2610b3a806100976000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80637a9e5e4b1161005b5780637a9e5e4b146101465780638da5cb5b1461018a578063ac4c25b2146101d4578063bf7e214f146101de57610088565b806313af40351461008d5780631504460f146100d157806357de26a4146100ff57806359e02dd71461011d575b600080fd5b6100cf600480360360208110156100a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610228565b005b6100fd600480360360208110156100e757600080fd5b8101908080359060200190929190505050610371565b005b6101076104f2565b6040518082815260200191505060405180910390f35b610125610582565b60405180838152602001821515151581526020019250505060405180910390f35b6101886004803603602081101561015c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105a0565b005b6101926106e7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101dc61070d565b005b6101e6610887565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610256336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b6102c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a4610459336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b6104cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b8360028190555060018060146101000a81548160ff02191690831515021790555050505050565b60008060006104ff610582565b80925081935050508061057a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f68617a2d6e6f740000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b819250505090565b600080600254600160149054906101000a900460ff16915091509091565b6105ce336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b610640576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46107f5336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b610867576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b6000600160146101000a81548160ff021916908315150217905550505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108eb5760019050610aff565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561094a5760019050610aff565b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156109a95760009050610aff565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015610ac157600080fd5b505afa158015610ad5573d6000803e3d6000fd5b505050506040513d6020811015610aeb57600080fd5b810190808051906020019092919050505090505b9291505056fea265627a7a7231582014bd5fd030ff737e59255d9fa6f83c502a9822c8743b9de6b077101da834e23064736f6c634300050c0032") + + syntax Bytes ::= "DSValue_bin_runtime" [macro] + // ---------------------------------------------- + rule DSValue_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106100885760003560e01c80637a9e5e4b1161005b5780637a9e5e4b146101465780638da5cb5b1461018a578063ac4c25b2146101d4578063bf7e214f146101de57610088565b806313af40351461008d5780631504460f146100d157806357de26a4146100ff57806359e02dd71461011d575b600080fd5b6100cf600480360360208110156100a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610228565b005b6100fd600480360360208110156100e757600080fd5b8101908080359060200190929190505050610371565b005b6101076104f2565b6040518082815260200191505060405180910390f35b610125610582565b60405180838152602001821515151581526020019250505060405180910390f35b6101886004803603602081101561015c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105a0565b005b6101926106e7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101dc61070d565b005b6101e6610887565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610256336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b6102c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a4610459336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b6104cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b8360028190555060018060146101000a81548160ff02191690831515021790555050505050565b60008060006104ff610582565b80925081935050508061057a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f68617a2d6e6f740000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b819250505090565b600080600254600160149054906101000a900460ff16915091509091565b6105ce336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b610640576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060006004359250602435915034905081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46107f5336000357fffffffff00000000000000000000000000000000000000000000000000000000166108ac565b610867576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b6000600160146101000a81548160ff021916908315150217905550505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108eb5760019050610aff565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561094a5760019050610aff565b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156109a95760009050610aff565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015610ac157600080fd5b505afa158015610ad5573d6000803e3d6000fd5b505050506040513d6020811015610aeb57600080fd5b810190808051906020019092919050505090505b9291505056fea265627a7a7231582014bd5fd030ff737e59255d9fa6f83c502a9822c8743b9de6b077101da834e23064736f6c634300050c0032") + + syntax Bytes ::= "Spotter_bin" [macro] + // -------------------------------------- + rule Spotter_bin => #parseByteStack("0x608060405234801561001057600080fd5b506040516111893803806111898339818101604052602081101561003357600080fd5b810190808051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506b033b2e3c9fd0803ce8000000600381905550600160048190555050611095806100f46000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80636924500911610071578063692450091461020d578063957aa58c146102175780639c52a7f114610235578063bf353dbb14610279578063d9638d36146102d1578063ebecb39d14610346576100b4565b80631504460f146100b95780631a0b287e146100e757806329ae81141461012957806336569e7714610161578063495d32cb146101ab57806365fae35e146101c9575b600080fd5b6100e5600480360360208110156100cf57600080fd5b810190808035906020019092919050505061039e565b005b610127600480360360608110156100fd57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506105bd565b005b61015f6004803603604081101561013f57600080fd5b8101908080359060200190929190803590602001909291905050506107d7565b005b6101696109dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101b3610a02565b6040518082815260200191505060405180910390f35b61020b600480360360208110156101df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a08565b005b610215610b36565b005b61021f610c27565b6040518082815260200191505060405180910390f35b6102776004803603602081101561024b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c2d565b005b6102bb6004803603602081101561028f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d5b565b6040518082815260200191505060405180910390f35b6102fd600480360360208110156102e757600080fd5b8101908080359060200190929190505050610d73565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b61039c6004803603606081101561035c57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610db7565b005b6000806001600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359e02dd76040518163ffffffff1660e01b81526004016040805180830381600087803b15801561041e57600080fd5b505af1158015610432573d6000803e3d6000fd5b505050506040513d604081101561044857600080fd5b810190808051906020019092919080519060200190929190505050915091506000816104755760006104b1565b6104b061049461048c8560001c633b9aca0061100b565b600354611037565b6001600087815260200190815260200160002060010154611037565b5b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a0b287e85836040518363ffffffff1660e01b815260040180838152602001807f73706f740000000000000000000000000000000000000000000000000000000081525060200182815260200192505050600060405180830381600087803b15801561055857600080fd5b505af115801561056c573d6000803e3d6000fd5b505050507fdfd7467e425a8107cfd368d159957692c25085aacbcf5228ce08f10f2146486e84848360405180848152602001838152602001828152602001935050505060405180910390a150505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b6001600454146106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f53706f747465722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7f6d617400000000000000000000000000000000000000000000000000000000008214156107315780600160008581526020019081526020016000206001018190555061079f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53706f747465722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461088b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160045414610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f53706f747465722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7f706172000000000000000000000000000000000000000000000000000000000082141561093757806003819055506109a5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53706f747465722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610abc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610bea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60006004819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60045481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160045414610ee3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f53706f747465722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7f7069700000000000000000000000000000000000000000000000000000000000821415610f6557806001600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fd3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53706f747465722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600080821480611028575082828385029250828161102557fe5b04145b61103157600080fd5b92915050565b600081611050846b033b2e3c9fd0803ce800000061100b565b8161105757fe5b0490509291505056fea265627a7a72315820b999c6bc8140aa3d6542c1d3f42a7064630777fe8352e66ff244c3e2d8969cfe64736f6c634300050c0032") + + syntax Bytes ::= "Spotter_bin_runtime" [macro] + // ---------------------------------------------- + rule Spotter_bin_runtime => #parseByteStack("0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80636924500911610071578063692450091461020d578063957aa58c146102175780639c52a7f114610235578063bf353dbb14610279578063d9638d36146102d1578063ebecb39d14610346576100b4565b80631504460f146100b95780631a0b287e146100e757806329ae81141461012957806336569e7714610161578063495d32cb146101ab57806365fae35e146101c9575b600080fd5b6100e5600480360360208110156100cf57600080fd5b810190808035906020019092919050505061039e565b005b610127600480360360608110156100fd57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506105bd565b005b61015f6004803603604081101561013f57600080fd5b8101908080359060200190929190803590602001909291905050506107d7565b005b6101696109dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101b3610a02565b6040518082815260200191505060405180910390f35b61020b600480360360208110156101df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a08565b005b610215610b36565b005b61021f610c27565b6040518082815260200191505060405180910390f35b6102776004803603602081101561024b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c2d565b005b6102bb6004803603602081101561028f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d5b565b6040518082815260200191505060405180910390f35b6102fd600480360360208110156102e757600080fd5b8101908080359060200190929190505050610d73565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b61039c6004803603606081101561035c57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610db7565b005b6000806001600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359e02dd76040518163ffffffff1660e01b81526004016040805180830381600087803b15801561041e57600080fd5b505af1158015610432573d6000803e3d6000fd5b505050506040513d604081101561044857600080fd5b810190808051906020019092919080519060200190929190505050915091506000816104755760006104b1565b6104b061049461048c8560001c633b9aca0061100b565b600354611037565b6001600087815260200190815260200160002060010154611037565b5b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a0b287e85836040518363ffffffff1660e01b815260040180838152602001807f73706f740000000000000000000000000000000000000000000000000000000081525060200182815260200192505050600060405180830381600087803b15801561055857600080fd5b505af115801561056c573d6000803e3d6000fd5b505050507fdfd7467e425a8107cfd368d159957692c25085aacbcf5228ce08f10f2146486e84848360405180848152602001838152602001828152602001935050505060405180910390a150505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b6001600454146106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f53706f747465722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7f6d617400000000000000000000000000000000000000000000000000000000008214156107315780600160008581526020019081526020016000206001018190555061079f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53706f747465722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461088b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160045414610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f53706f747465722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7f706172000000000000000000000000000000000000000000000000000000000082141561093757806003819055506109a5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53706f747465722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a4505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610abc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610bea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60006004819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450565b60045481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a45050565b60006020528060005260406000206000915090505481565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53706f747465722f6e6f742d617574686f72697a65640000000000000000000081525060200191505060405180910390fd5b600160045414610ee3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f53706f747465722f6e6f742d6c6976650000000000000000000000000000000081525060200191505060405180910390fd5b7f7069700000000000000000000000000000000000000000000000000000000000821415610f6557806001600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fd3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53706f747465722f66696c652d756e7265636f676e697a65642d706172616d0081525060200191505060405180910390fd5b5961012081016040526020815260e0602082015260e0600060408301376024356004353360003560e01c60e01b61012085a450505050565b600080821480611028575082828385029250828161102557fe5b04145b61103157600080fd5b92915050565b600081611050846b033b2e3c9fd0803ce800000061100b565b8161105757fe5b0490509291505056fea265627a7a72315820b999c6bc8140aa3d6542c1d3f42a7064630777fe8352e66ff244c3e2d8969cfe64736f6c634300050c0032") + +endmodule diff --git a/tests/specs/mcd-structured/cat-exhaustiveness-spec.k b/tests/specs/mcd-structured/cat-exhaustiveness-spec.k new file mode 100644 index 0000000000..3e91c997de --- /dev/null +++ b/tests/specs/mcd-structured/cat-exhaustiveness-spec.k @@ -0,0 +1,100 @@ +requires "verification.k" + +module CAT-EXHAUSTIVENESS-SPEC + imports VERIFICATION + + // Cat__exhaustiveness + claim [Cat..exhaustiveness]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => ?_ + _ => EVMC_REVERT + _VCallStack + _ + _ => ?_ + + Cat_bin_runtime + #computeValidJumpDests(Cat_bin_runtime) + ACCT_ID + CALLER_ID + VCallData + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + _VStatic + VCallDepth + + + _VSelfDestruct + _ => ?_ + _ => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + _ + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool 1171202608 =/=Int #asWord(#range(VCallData, 0, 4) ) + andBool 1763987465 =/=Int #asWord(#range(VCallData, 0, 4) ) + andBool 2622662641 =/=Int #asWord(#range(VCallData, 0, 4) ) + andBool 436938878 =/=Int #asWord(#range(VCallData, 0, 4) ) + andBool 3572022915 =/=Int #asWord(#range(VCallData, 0, 4) ) + andBool 3958158237 =/=Int #asWord(#range(VCallData, 0, 4) ) + andBool 3647180086 =/=Int #asWord(#range(VCallData, 0, 4) ) + andBool 2507842956 =/=Int #asWord(#range(VCallData, 0, 4) ) + andBool 1710941022 =/=Int #asWord(#range(VCallData, 0, 4) ) + andBool 911646327 =/=Int #asWord(#range(VCallData, 0, 4) ) + andBool 1651291077 =/=Int #asWord(#range(VCallData, 0, 4) ) + andBool 3207937467 =/=Int #asWord(#range(VCallData, 0, 4) ) + andBool VGas >=Int 40000000 + +endmodule diff --git a/tests/specs/mcd-structured/cat-file-addr-pass-rough-spec.k b/tests/specs/mcd-structured/cat-file-addr-pass-rough-spec.k new file mode 100644 index 0000000000..a8b059cafd --- /dev/null +++ b/tests/specs/mcd-structured/cat-file-addr-pass-rough-spec.k @@ -0,0 +1,117 @@ +requires "verification.k" + +module CAT-FILE-ADDR-PASS-ROUGH-SPEC + imports VERIFICATION + + // Cat_file-addr + claim [Cat.file-addr.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Cat_bin_runtime + #computeValidJumpDests(Cat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("file", #bytes32(ABI_what), #address(ABI_data)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Cat_bin_runtime + + (#Cat.wards[CALLER_ID] |-> May) + (#Cat.vow |-> Vow) + ACCT_ID_STORAGE => + (#Cat.wards[CALLER_ID] |-> May) + (#Cat.vow |-> ABI_data) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + Nonce_Cat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Cat) + + andBool (#rangeBytes(32, ABI_what) + andBool (#rangeAddress(ABI_data) + andBool (#rangeUInt(256, May) + andBool (#rangeAddress(Vow) + andBool (lengthBytes(CD) <=Int 1250000000 + andBool (#notPrecompileAddress(Vow) + andBool ((May ==Int 1) + andBool ((VCallValue ==Int 0) + andBool ((ABI_what ==Int #string2Word("vow"))))))))))) + +endmodule diff --git a/tests/specs/mcd-structured/dai-adduu-fail-rough-spec.k b/tests/specs/mcd-structured/dai-adduu-fail-rough-spec.k new file mode 100644 index 0000000000..c566bd4007 --- /dev/null +++ b/tests/specs/mcd-structured/dai-adduu-fail-rough-spec.k @@ -0,0 +1,112 @@ +requires "verification.k" + +module DAI-ADDUU-FAIL-ROUGH-SPEC + imports VERIFICATION + + // Dai_adduu + claim [Dai.adduu.fail.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => ?_ + _ => ?FAILURE:EndStatusCode + _VCallStack + _ + _ => ?_ + + Dai_bin_runtime + #computeValidJumpDests(Dai_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => ?_ + _ + 7825 => ?_ + #gas(VGas) => ?_ + VMemoryUsed + _ => ?_ + _ + VCallDepth => ?_ + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Dai_bin_runtime + ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE + ACCT_ID_ORIG_STORAGE + Nonce_Dai + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Dai) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed))))) + + + andBool notBool ( + ((#rangeUInt(256, ABI_x:Int +Int ABI_y:Int))) + ) + ensures + ?FAILURE =/=K EVMC_SUCCESS + +endmodule diff --git a/tests/specs/mcd-structured/dai-symbol-pass-spec.k b/tests/specs/mcd-structured/dai-symbol-pass-spec.k new file mode 100644 index 0000000000..4af11a26fc --- /dev/null +++ b/tests/specs/mcd-structured/dai-symbol-pass-spec.k @@ -0,0 +1,104 @@ +requires "verification.k" + +module DAI-SYMBOL-PASS-SPEC + imports VERIFICATION + + // Dai_symbol + claim [Dai.symbol.pass]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => #buf(32, 32) +Bytes #buf(32, 3) +Bytes b"DAI" +Bytes #buf(29, 0) + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Dai_bin_runtime + #computeValidJumpDests(Dai_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("symbol", .TypedArgs) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => #gas ( ( VGas +Int -672 ) ) + 0 => ?_ + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Dai_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + ACCT_ID_ORIG_STORAGE + _Nonce_Dai => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (lengthBytes(CD) <=Int 1250000000 + andBool ((VCallValue ==Int 0))) + + + +endmodule diff --git a/tests/specs/mcd-structured/dstoken-approve-fail-rough-spec.k b/tests/specs/mcd-structured/dstoken-approve-fail-rough-spec.k new file mode 100644 index 0000000000..45a20b895e --- /dev/null +++ b/tests/specs/mcd-structured/dstoken-approve-fail-rough-spec.k @@ -0,0 +1,117 @@ +requires "verification.k" + +module DSTOKEN-APPROVE-FAIL-ROUGH-SPEC + imports VERIFICATION + + // DSToken_approve + claim [DSToken.approve.fail.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => ?_ + _ => ?FAILURE:EndStatusCode + _VCallStack + _ + _ => ?_ + + DSToken_bin_runtime + #computeValidJumpDests(DSToken_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("approve", #address(ABI_usr), #uint256(ABI_wad)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth => ?_ + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + DSToken_bin_runtime + + (#DSToken.allowance[CALLER_ID][ABI_usr] |-> Allowed) + (#DSToken.owner_stopped |-> #WordPackAddrUInt8(Owner, Stopped)) + ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + _Nonce_DSToken => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeAddress(ABI_usr) + andBool (#rangeUInt(256, ABI_wad) + andBool (#rangeUInt(256, Allowed) + andBool (#rangeBool(Stopped) + andBool (#rangeAddress(Owner) + andBool (lengthBytes(CD) <=Int 1250000000 + andBool (#notPrecompileAddress(Owner)))))))) + andBool notBool ( + ((Stopped:Int ==Int 0) + andBool ((VCallValue:Int ==Int 0))) + ) + ensures + ?FAILURE =/=K EVMC_SUCCESS + +endmodule diff --git a/tests/specs/mcd-structured/dsvalue-peek-pass-rough-spec.k b/tests/specs/mcd-structured/dsvalue-peek-pass-rough-spec.k new file mode 100644 index 0000000000..a91e339a2e --- /dev/null +++ b/tests/specs/mcd-structured/dsvalue-peek-pass-rough-spec.k @@ -0,0 +1,110 @@ +requires "verification.k" + +module DSVALUE-PEEK-PASS-ROUGH-SPEC + imports VERIFICATION + + // DSValue_peek + claim [DSValue.peek.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => #buf(32, Value) +Bytes #buf(32, Ok) + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + DSValue_bin_runtime + #computeValidJumpDests(DSValue_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("peek", .TypedArgs) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + DSValue_bin_runtime + + (#DSValue.owner_has |-> #WordPackAddrUInt8(Owner, Ok)) + (#DSValue.val |-> Value) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + _Nonce_DSValue => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeAddress(Owner) + andBool (#rangeBytes(32, Value) + andBool (#rangeBool(Ok) + andBool (lengthBytes(CD) <=Int 1250000000 + andBool (#notPrecompileAddress(Owner) + andBool ((VCallValue ==Int 0))))))) + +endmodule diff --git a/tests/specs/mcd-structured/dsvalue-read-pass-spec.k b/tests/specs/mcd-structured/dsvalue-read-pass-spec.k new file mode 100644 index 0000000000..e50e5566de --- /dev/null +++ b/tests/specs/mcd-structured/dsvalue-read-pass-spec.k @@ -0,0 +1,113 @@ +requires "verification.k" + +module DSVALUE-READ-PASS-SPEC + imports VERIFICATION + + // DSValue_read + claim [DSValue.read.pass]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => #buf(32, Value) + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + DSValue_bin_runtime + #computeValidJumpDests(DSValue_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("read", .TypedArgs) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => #gas ( ( VGas +Int -2043 ) ) + 0 => ?_ + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + DSValue_bin_runtime + + (#DSValue.owner_has |-> #WordPackAddrUInt8(Owner, Ok)) + (#DSValue.val |-> Value) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + Nonce_DSValue + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeAddress(Owner) + andBool (#rangeBytes(32, Value) + andBool (#rangeBool(Ok) + andBool (lengthBytes(CD) <=Int 1250000000 + andBool (#notPrecompileAddress(Owner) + andBool ((VCallValue ==Int 0) + andBool ((Ok ==Int 1)))))))) + + andBool #rangeNonce(Nonce_DSValue) + +endmodule diff --git a/tests/specs/mcd-structured/dsvalue-read-pass-summarize-spec.k b/tests/specs/mcd-structured/dsvalue-read-pass-summarize-spec.k new file mode 100644 index 0000000000..6003de0295 --- /dev/null +++ b/tests/specs/mcd-structured/dsvalue-read-pass-summarize-spec.k @@ -0,0 +1,145 @@ +requires "verification.k" + +module DSVALUE-READ-PASS-SUMMARIZE-SPEC + imports VERIFICATION + +// Prove that all paths of execution for Dai.read fail +// 333s +// claim [DSValue.read.pass]: +// #execute => #halt ... +// ISTANBUL +// +// _ => ?FAILURE:EndStatusCode +// +// ACCT_ID +// DSValue_bin_runtime +// #computeValidJumpDests(DSValue_bin_runtime) +// #abiCallData("read", .TypedArgs) +Bytes CD => ?_ +// #gas(VGas) => ?_ +// 0 => ?_ +// .WordStack => ?_ +// .Bytes => ?_ +// 0 => ?_ +// (_ => ?_) +// +// (_ => ?_) +// +// +// ACCT_ID +// ACCT_STORAGE => ?_ +// (_ => ?_) +// +// ensures ?FAILURE =/=K EVMC_SUCCESS + +// Counter-example provided by prover +// #Not( { 255 &Int #lookup( ACCT_STORAGE , 1 ) /Int 1461501637330902918203684832716283019655932542976 #Equals 0 } ) +// #And +// +// +// #halt +// ~> _DotVar2 +// +// +// ISTANBUL +// +// +// +// +// #buf( 32 , #lookup( ACCT_STORAGE , 2 ) ) +// +// +// EVMC SUCCESS +// +// 284 +// +// DSValue_bin_runtime +// #computeValidJumpDests(DSValue_bin_runtime) +// +// ACCT_ID +// +// +// b"W\xde&\xa4" +Bytes CD +// +// +// 0 +// +// +// 1474176676 : .WordStack +// +// +// b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80" [ 128 := #buf( 32 , #lookup( ACCT_STORAGE , 2 ) ) ] +// +// +// 284 +// +// +// #gas( VGas +Int -2043 ) +// +// +// 5 +// +// ... +// +// ... +// +// +// +// AccountCellMapItem( +// ACCT_ID +// , +// +// ACCT_ID +// +// +// ACCT_STORAGE +// +// ... +// ) _DotVar5 +// +// ... +// +// +// ... +// +// ... +// +// #And { false #Equals +// ACCT_ID +// in _DotVar5 keys( ) } + +// Converted to summary +// 313s + claim [DSValue.read.pass]: + #execute => #halt ... + ISTANBUL + true + + _ => #buf(32, VALUE) // from counterexample + _ => EVMC_SUCCESS + + ACCT_ID + DSValue_bin_runtime + #computeValidJumpDests(DSValue_bin_runtime) + #abiCallData("read", .TypedArgs) +Bytes _CD => ?_ + 0 // from counterexample + #gas(VGas) => #gas(VGas +Int -2043) // from counterexample + 0 => ?_ + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + (_ => ?_) + + (_ => ?_) + + + ACCT_ID + + (1 |-> #WordPackAddrUInt8(Owner, Ok)) + (2 |-> VALUE) + ACCT_STORAGE => ?_ + (_ => ?_) + + requires #rangeUInt(8, Ok) andBool #rangeAddress(Owner) andBool rangeUInt(256, VALUE) + andBool notBool (Ok ==Int 0) + +endmodule diff --git a/tests/specs/mcd-structured/end-cash-pass-rough-spec.k b/tests/specs/mcd-structured/end-cash-pass-rough-spec.k new file mode 100644 index 0000000000..a7b1cf6efb --- /dev/null +++ b/tests/specs/mcd-structured/end-cash-pass-rough-spec.k @@ -0,0 +1,479 @@ +requires "verification.k" + +module END-CASH-PASS-ROUGH-SPEC + imports VERIFICATION + + // End_cash + claim [End.cash.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + End_bin_runtime + #computeValidJumpDests(End_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("cash", #bytes32(ABI_ilk), #uint256(ABI_wad)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + End_bin_runtime + + (#End.vat |-> Vat) + (#End.fix[ABI_ilk] |-> Fix) + (#End.bag[CALLER_ID] |-> Bag) + (#End.out[ABI_ilk][CALLER_ID] |-> Out) + ACCT_ID_STORAGE => + (#End.vat |-> Vat) + (#End.fix[ABI_ilk] |-> Fix) + (#End.bag[CALLER_ID] |-> Bag) + (#End.out[ABI_ilk][CALLER_ID] |-> Out +Int ABI_wad) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + Nonce_End + _ + + + Vat + Vat_balance + Vat_bin_runtime + + (#Vat.gem[ABI_ilk][ACCT_ID] |-> Gem_e) + (#Vat.gem[ABI_ilk][CALLER_ID] |-> Gem_c) + Vat_STORAGE => + (#Vat.gem[ABI_ilk][ACCT_ID] |-> (Gem_e -Int #rmul(ABI_wad, Fix))) + (#Vat.gem[ABI_ilk][CALLER_ID] |-> (Gem_c +Int #rmul(ABI_wad, Fix))) + Vat_STORAGE + + Vat_ORIG_STORAGE + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_End) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeBytes(32, ABI_ilk) + andBool (#rangeUInt(256, ABI_wad) + andBool (#rangeAddress(Vat) + andBool (#rangeUInt(256, Fix) + andBool (#rangeUInt(256, Bag) + andBool (#rangeUInt(256, Out) + andBool (#rangeUInt(256, Gem_e) + andBool (#rangeUInt(256, Gem_c) + andBool (#rangeUInt(256, Vat_balance) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((#notPrecompileAddress(Vat)) + andBool ((ACCT_ID =/=Int Vat) + andBool ((ACCT_ID =/=Int CALLER_ID) + andBool ((Vat =/=Int 0) + andBool (((Fix =/=Int 0)) + andBool (((Out +Int ABI_wad <=Int Bag)) + andBool (((VCallValue ==Int 0)) + andBool (((VCallDepth #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + End_bin_runtime + #computeValidJumpDests(End_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS + _ + 14775 => 14800 + #gas(VGas) => #gas ( ( VGas +Int -54 ) ) + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + End_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + ACCT_ID_ORIG_STORAGE + Nonce_End + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_End) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) + + [trusted] + + // End_rmul + claim [End.rmul.pass]: + #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + End_bin_runtime + #computeValidJumpDests(End_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : (ABI_x *Int ABI_y) /Int #Ray : WS + _ + 14623 => 14663 + #gas(VGas) => #if ABI_y ==Int 0 + #then #gas ( ( VGas +Int -127 ) ) + #else #gas ( ( VGas +Int -179 ) ) + #fi + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + End_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + ACCT_ID_ORIG_STORAGE + Nonce_End + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_End) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 1000) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) + + [trusted] + + // Vat_flux-diff + claim [Vat.flux-diff.pass]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("flux", #bytes32(ABI_ilk), #address(ABI_src), #address(ABI_dst), #uint256(ABI_wad)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Gem_src -Int ABI_wad ) , Gem_src , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Gem_dst +Int ABI_wad ) , Gem_dst , Junk_2 ) ) +Int -8307 ) ) + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.can[ABI_src][CALLER_ID] |-> May) + (#Vat.gem[ABI_ilk][ABI_src] |-> Gem_src) + (#Vat.gem[ABI_ilk][ABI_dst] |-> Gem_dst) + ACCT_ID_STORAGE => + (#Vat.can[ABI_src][CALLER_ID] |-> May) + (#Vat.gem[ABI_ilk][ABI_src] |-> (Gem_src -Int ABI_wad)) + (#Vat.gem[ABI_ilk][ABI_dst] |-> (Gem_dst +Int ABI_wad)) + + + (#Vat.gem[ABI_ilk][ABI_src] |-> Junk_1) + (#Vat.gem[ABI_ilk][ABI_dst] |-> Junk_2) + ACCT_ID_ORIG_STORAGE + + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeBytes(32, ABI_ilk) + andBool (#rangeAddress(ABI_src) + andBool (#rangeAddress(ABI_dst) + andBool (#rangeUInt(256, ABI_wad) + andBool (#rangeUInt(256, May) + andBool (#rangeUInt(256, Gem_src) + andBool (#rangeUInt(256, Gem_dst) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((ABI_src =/=Int ABI_dst) + andBool ((((May ==Int 1 orBool ABI_src ==Int CALLER_ID))) + andBool (((VCallValue ==Int 0)) + andBool ((#rangeUInt(256, Gem_src -Int ABI_wad)) + andBool ((#rangeUInt(256, Gem_dst +Int ABI_wad))))))))))))))) + + [trusted] + +endmodule diff --git a/tests/specs/mcd-structured/end-pack-pass-rough-spec.k b/tests/specs/mcd-structured/end-pack-pass-rough-spec.k new file mode 100644 index 0000000000..2ee8682438 --- /dev/null +++ b/tests/specs/mcd-structured/end-pack-pass-rough-spec.k @@ -0,0 +1,486 @@ +requires "verification.k" + +module END-PACK-PASS-ROUGH-SPEC + imports VERIFICATION + + // End_pack + claim [End.pack.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + End_bin_runtime + #computeValidJumpDests(End_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("pack", #uint256(ABI_wad)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + End_bin_runtime + + (#End.vat |-> Vat) + (#End.vow |-> Vow) + (#End.debt |-> Debt) + (#End.bag[CALLER_ID] |-> Bag) + ACCT_ID_STORAGE => + (#End.vat |-> Vat) + (#End.vow |-> Vow) + (#End.debt |-> Debt) + (#End.bag[CALLER_ID] |-> Bag +Int ABI_wad) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + Nonce_End + _ + + + Vat + Vat_balance + Vat_bin_runtime + + (#Vat.can[CALLER_ID][ACCT_ID] |-> Can) + (#Vat.dai[CALLER_ID] |-> Dai) + (#Vat.dai[Vow] |-> Joy) + Vat_STORAGE => + (#Vat.can[CALLER_ID][ACCT_ID] |-> Can) + (#Vat.dai[CALLER_ID] |-> (Dai -Int ABI_wad *Int #Ray)) + (#Vat.dai[Vow] |-> (Joy +Int ABI_wad *Int #Ray)) + Vat_STORAGE + + Vat_ORIG_STORAGE + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_End) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeUInt(256, ABI_wad) + andBool (#rangeAddress(Vat) + andBool (#rangeAddress(Vow) + andBool (#rangeUInt(256, Debt) + andBool (#rangeUInt(256, Bag) + andBool (#rangeUInt(256, Joy) + andBool (#rangeUInt(256, Dai) + andBool (#rangeUInt(256, Can) + andBool (#rangeUInt(256, Vat_balance) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((#notPrecompileAddress(Vat)) + andBool ((#notPrecompileAddress(Vow)) + andBool ((ACCT_ID =/=Int Vat) + andBool ((CALLER_ID =/=Int Vow) + andBool ((CALLER_ID =/=Int ACCT_ID) + andBool ((Vat =/=Int 0) + andBool (((Debt =/=Int 0)) + andBool (((Can ==Int 1)) + andBool (((VCallValue ==Int 0)) + andBool (((VCallDepth #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + End_bin_runtime + #computeValidJumpDests(End_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x *Int ABI_y : WS + _ + 14690 => 14733 + #gas(VGas) => #if ABI_y ==Int 0 + #then #gas ( ( VGas +Int -54 ) ) + #else #gas ( ( VGas +Int -106 ) ) + #fi + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + End_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + _ACCT_ID_ORIG_STORAGE + Nonce_End + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_End) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 1000) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) + + [trusted] + + // End_adduu + claim [End.adduu.pass]: + #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + End_bin_runtime + #computeValidJumpDests(End_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS + _ + 14775 => 14800 + #gas(VGas) => #gas ( ( VGas +Int -54 ) ) + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + End_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + _ACCT_ID_ORIG_STORAGE + Nonce_End + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_End) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) + + [trusted] + + // Vat_move-diff + claim [Vat.move-diff.pass]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("move", #address(ABI_src), #address(ABI_dst), #uint256(ABI_rad)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Dai_src -Int ABI_rad ) , Dai_src , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Dai_dst +Int ABI_rad ) , Dai_dst , Junk_2 ) ) +Int -7943 ) ) + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.can[ABI_src][CALLER_ID] |-> May) + (#Vat.dai[ABI_src] |-> Dai_src) + (#Vat.dai[ABI_dst] |-> Dai_dst) + ACCT_ID_STORAGE => + (#Vat.can[ABI_src][CALLER_ID] |-> May) + (#Vat.dai[ABI_src] |-> (Dai_src -Int ABI_rad)) + (#Vat.dai[ABI_dst] |-> (Dai_dst +Int ABI_rad)) + ACCT_ID_STORAGE + + + (#Vat.dai[ABI_src] |-> Junk_1) + (#Vat.dai[ABI_dst] |-> Junk_2) + ACCT_ID_ORIG_STORAGE + + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeAddress(ABI_src) + andBool (#rangeAddress(ABI_dst) + andBool (#rangeUInt(256, ABI_rad) + andBool (#rangeUInt(256, Dai_dst) + andBool (#rangeUInt(256, Dai_src) + andBool (#rangeUInt(256, May) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((ABI_src =/=Int ABI_dst) + andBool (#rangeUInt(256, Junk_1) + andBool (#rangeUInt(256, Junk_2) + andBool ((((May ==Int 1 orBool ABI_src ==Int CALLER_ID))) + andBool (((VCallValue ==Int 0)) + andBool ((#rangeUInt(256, Dai_src -Int ABI_rad)) + andBool ((#rangeUInt(256, Dai_dst +Int ABI_rad)))))))))))))))) + + [trusted] + +endmodule diff --git a/tests/specs/mcd-structured/end-subuu-pass-spec.k b/tests/specs/mcd-structured/end-subuu-pass-spec.k new file mode 100644 index 0000000000..c6ad53ce58 --- /dev/null +++ b/tests/specs/mcd-structured/end-subuu-pass-spec.k @@ -0,0 +1,107 @@ +requires "verification.k" + +module END-SUBUU-PASS-SPEC + imports VERIFICATION + + // End_subuu + claim [End.subuu.pass]: + #execute ~> CONTINUATION => JUMP JMPTO ~> #pc [ JUMP ] ~> #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + End_bin_runtime + #computeValidJumpDests(End_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO:Int : WS => ABI_x -Int ABI_y : WS + _ + 14664 => 14689 + #gas(VGas) => #gas ( ( VGas +Int -62 ) ) // -54 + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + End_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + _ACCT_ID_ORIG_STORAGE + _Nonce_End => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x -Int ABI_y))))))) + + + +endmodule diff --git a/tests/specs/mcd-structured/flapper-yank-pass-rough-spec.k b/tests/specs/mcd-structured/flapper-yank-pass-rough-spec.k new file mode 100644 index 0000000000..2c3a50a89b --- /dev/null +++ b/tests/specs/mcd-structured/flapper-yank-pass-rough-spec.k @@ -0,0 +1,302 @@ +requires "verification.k" + +module FLAPPER-YANK-PASS-ROUGH-SPEC + imports VERIFICATION + + // Flapper_yank + claim [Flapper.yank.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Flapper_bin_runtime + #computeValidJumpDests(Flapper_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("yank", #uint256(ABI_id)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flapper_bin_runtime + + (#Flapper.live |-> Live) + (#Flapper.gem |-> DSToken) + (#Flapper.bids[ABI_id].bid |-> Bid) + (#Flapper.bids[ABI_id].lot |-> Lot) + (#Flapper.bids[ABI_id].guy_tic_end |-> #WordPackAddrUInt48UInt48(Guy, Tic, End)) + ACCT_ID_STORAGE => + (#Flapper.live |-> Live) + (#Flapper.gem |-> DSToken) + (#Flapper.bids[ABI_id].bid |-> 0) + (#Flapper.bids[ABI_id].lot |-> 0) + (#Flapper.bids[ABI_id].guy_tic_end |-> 0) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + Nonce_Flapper + _ + + + DSToken + DSToken_balance + DSToken_bin_runtime + + (#DSToken.balances[ACCT_ID] |-> Gem_a) + (#DSToken.balances[Guy] |-> Gem_g) + (#DSToken.owner_stopped |-> #WordPackAddrUInt8(Owner, Stopped)) + DSToken_STORAGE => + (#DSToken.balances[ACCT_ID] |-> Gem_a -Int Bid) + (#DSToken.balances[Guy] |-> Gem_g +Int Bid) + (#DSToken.owner_stopped |-> #WordPackAddrUInt8(Owner, Stopped)) + DSToken_STORAGE + + + DSToken_ORIG_STORAGE + + Nonce_DSToken + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeUInt(256, ABI_id) + andBool (#rangeUInt(256, Live) + andBool (#rangeAddress(DSToken) + andBool (#rangeUInt(256, Bid) + andBool (#rangeUInt(256, Lot) + andBool (#rangeAddress(Guy) + andBool (#rangeUInt(48, Tic) + andBool (#rangeUInt(48, End) + andBool (#rangeUInt(256, Gem_a) + andBool (#rangeUInt(256, Gem_g) + andBool (#rangeBool(Stopped) + andBool (#rangeAddress(Owner) + andBool (#rangeUInt(256, DSToken_balance) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((#notPrecompileAddress(DSToken)) + andBool ((#notPrecompileAddress(Guy)) + andBool ((#notPrecompileAddress(Owner)) + andBool ((ACCT_ID =/=Int DSToken) + andBool (((DSToken =/=Int 0)) + andBool ((ACCT_ID =/=Int Guy) + andBool (((Live ==Int 0)) + andBool (((Guy =/=Int 0)) + andBool (((Stopped ==Int 0)) + andBool (((VCallDepth #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + DSToken_bin_runtime + #computeValidJumpDests(DSToken_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("move", #address(ABI_src), #address(ABI_dst), #uint256(ABI_wad)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => #if ( Allowance ==Int maxUInt256 ) + #then #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Gem_s -Int ABI_wad ) , Gem_s , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Gem_d +Int ABI_wad ) , Gem_d , Junk_2 ) ) +Int -7281 ) ) + #else #gas ( ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Allowance -Int ABI_wad ) , Allowance , Junk_0 ) ) -Int Csstore( ISTANBUL , ( Gem_s -Int ABI_wad ) , Gem_s , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Gem_d +Int ABI_wad ) , Gem_d , Junk_2 ) ) +Int -9538 ) ) + #fi + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + DSToken_bin_runtime + + (#DSToken.allowance[ABI_src][CALLER_ID] |-> Allowance) + (#DSToken.balances[ABI_src] |-> Gem_s) + (#DSToken.balances[ABI_dst] |-> Gem_d) + (#DSToken.owner_stopped |-> #WordPackAddrUInt8(Owner, Stopped)) + ACCT_ID_STORAGE => + (#DSToken.allowance[ABI_src][CALLER_ID] |-> #if Allowance ==Int maxUInt256 #then Allowance #else Allowance -Int ABI_wad #fi) + (#DSToken.balances[ABI_src] |-> Gem_s -Int ABI_wad) + (#DSToken.balances[ABI_dst] |-> Gem_d +Int ABI_wad) + (#DSToken.owner_stopped |-> #WordPackAddrUInt8(Owner, Stopped)) + ACCT_ID_STORAGE + + + (#DSToken.allowance[ABI_src][CALLER_ID] |-> Junk_0) + (#DSToken.balances[ABI_src] |-> Junk_1) + (#DSToken.balances[ABI_dst] |-> Junk_2) + ACCT_ID_ORIG_STORAGE + + Nonce_DSToken + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeAddress(ABI_src) + andBool (#rangeAddress(ABI_dst) + andBool (#rangeUInt(256, ABI_wad) + andBool (#rangeUInt(256, Gem_s) + andBool (#rangeUInt(256, Gem_d) + andBool (#rangeUInt(256, Allowance) + andBool (#rangeAddress(Owner) + andBool (#rangeBool(Stopped) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((#notPrecompileAddress(Owner)) + andBool ((ABI_src =/=Int ABI_dst) + andBool ((ABI_src =/=Int CALLER_ID) + andBool (#rangeUInt(256, Junk_0) + andBool (#rangeUInt(256, Junk_1) + andBool (#rangeUInt(256, Junk_2) + andBool (((#rangeUInt(256, Gem_s -Int ABI_wad))) + andBool (((#rangeUInt(256, Gem_d +Int ABI_wad))) + andBool (((Allowance ==Int maxUInt256) orBool (ABI_wad <=Int Allowance)) + andBool ((VCallValue ==Int 0) + andBool ((Stopped ==Int 0))))))))))))))))))))) + + andBool #rangeNonce(Nonce_DSToken) + + [trusted] + +endmodule diff --git a/tests/specs/mcd-structured/flipper-addu48u48-fail-rough-spec.k b/tests/specs/mcd-structured/flipper-addu48u48-fail-rough-spec.k new file mode 100644 index 0000000000..6b03538888 --- /dev/null +++ b/tests/specs/mcd-structured/flipper-addu48u48-fail-rough-spec.k @@ -0,0 +1,112 @@ +requires "verification.k" + +module FLIPPER-ADDU48U48-FAIL-ROUGH-SPEC + imports VERIFICATION + + // Flipper_addu48u48 + claim [Flipper.addu48u48.fail.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => ?_ + _ => ?FAILURE:EndStatusCode + _VCallStack + _ + _ => ?_ + + Flipper_bin_runtime + #computeValidJumpDests(Flipper_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => ?_ + _ + 11354 => ?_ + #gas(VGas) => ?_ + VMemoryUsed + _ => ?_ + _ + VCallDepth => ?_ + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flipper_bin_runtime + ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE + ACCT_ID_ORIG_STORAGE + Nonce_Flipper + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Flipper) + + andBool (#rangeUInt(48, ABI_x) + andBool (#rangeUInt(48, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed))))) + + + andBool notBool ( + ((#rangeUInt(48, ABI_x:Int +Int ABI_y:Int))) + ) + ensures + ?FAILURE =/=K EVMC_SUCCESS + +endmodule diff --git a/tests/specs/mcd-structured/flipper-bids-pass-rough-spec.k b/tests/specs/mcd-structured/flipper-bids-pass-rough-spec.k new file mode 100644 index 0000000000..8938417543 --- /dev/null +++ b/tests/specs/mcd-structured/flipper-bids-pass-rough-spec.k @@ -0,0 +1,122 @@ +requires "verification.k" + +module FLIPPER-BIDS-PASS-ROUGH-SPEC + imports VERIFICATION + + // Flipper_bids + claim [Flipper.bids.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => #buf(32, Bid) +Bytes #buf(32, Lot) +Bytes #buf(32, Guy) +Bytes #buf(32, Tic) +Bytes #buf(32, End) +Bytes #buf(32, Usr) +Bytes #buf(32, Gal) +Bytes #buf(32, Tab) + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Flipper_bin_runtime + #computeValidJumpDests(Flipper_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("bids", #uint256(ABI_n)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flipper_bin_runtime + + (#Flipper.bids[ABI_n].bid |-> Bid) + (#Flipper.bids[ABI_n].lot |-> Lot) + (#Flipper.bids[ABI_n].guy_tic_end |-> #WordPackAddrUInt48UInt48(Guy, Tic, End)) + (#Flipper.bids[ABI_n].usr |-> Usr) + (#Flipper.bids[ABI_n].gal |-> Gal) + (#Flipper.bids[ABI_n].tab |-> Tab) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + _Nonce_Flipper => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeUInt(256, ABI_n) + andBool (#rangeUInt(256, Bid) + andBool (#rangeUInt(256, Lot) + andBool (#rangeAddress(Guy) + andBool (#rangeUInt(48, Tic) + andBool (#rangeUInt(48, End) + andBool (#rangeAddress(Usr) + andBool (#rangeAddress(Gal) + andBool (#rangeUInt(256, Tab) + andBool (lengthBytes(CD) <=Int 1250000000 + andBool (#notPrecompileAddress(Guy) + andBool (#notPrecompileAddress(Usr) + andBool (#notPrecompileAddress(Gal) + andBool ((VCallValue ==Int 0))))))))))))))) + +endmodule diff --git a/tests/specs/mcd-structured/flipper-tau-pass-spec.k b/tests/specs/mcd-structured/flipper-tau-pass-spec.k new file mode 100644 index 0000000000..02f8278329 --- /dev/null +++ b/tests/specs/mcd-structured/flipper-tau-pass-spec.k @@ -0,0 +1,109 @@ +requires "verification.k" + +module FLIPPER-TAU-PASS-SPEC + imports VERIFICATION + + // Flipper_tau + claim [Flipper.tau.pass]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => #buf(32, Tau) + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Flipper_bin_runtime + #computeValidJumpDests(Flipper_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("tau", .TypedArgs) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => #gas ( ( VGas +Int -1169 ) ) + 0 => ?_ + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flipper_bin_runtime + + (#Flipper.ttl_tau |-> #WordPackUInt48UInt48(Ttl, Tau)) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + Nonce_Flipper + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeUInt(48, Ttl) + andBool (#rangeUInt(48, Tau) + andBool (lengthBytes(CD) <=Int 1250000000 + andBool ((VCallValue ==Int 0))))) + + andBool #rangeNonce(Nonce_Flipper) + +endmodule diff --git a/tests/specs/mcd-structured/flipper-ttl-pass-spec.k b/tests/specs/mcd-structured/flipper-ttl-pass-spec.k new file mode 100644 index 0000000000..19ab5945f8 --- /dev/null +++ b/tests/specs/mcd-structured/flipper-ttl-pass-spec.k @@ -0,0 +1,107 @@ +requires "verification.k" + +module FLIPPER-TTL-PASS-SPEC + imports VERIFICATION + + // Flipper_ttl + claim [Flipper.ttl.pass]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => #buf(32, Ttl) + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Flipper_bin_runtime + #computeValidJumpDests(Flipper_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("ttl", .TypedArgs) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => #gas ( ( VGas +Int -1120 ) ) + 0 => ?_ + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flipper_bin_runtime + + (#Flipper.ttl_tau |-> #WordPackUInt48UInt48(Ttl, Tau)) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + _Nonce_Flipper => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeUInt(48, Ttl) + andBool (#rangeUInt(48, Tau) + andBool (lengthBytes(CD) <=Int 1250000000 + andBool ((VCallValue ==Int 0))))) + +endmodule diff --git a/tests/specs/mcd-structured/flopper-cage-pass-spec.k b/tests/specs/mcd-structured/flopper-cage-pass-spec.k new file mode 100644 index 0000000000..611a26abed --- /dev/null +++ b/tests/specs/mcd-structured/flopper-cage-pass-spec.k @@ -0,0 +1,121 @@ +requires "verification.k" + +module FLOPPER-CAGE-PASS-SPEC + imports VERIFICATION + + claim [Flopper.cage.pass]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Flopper_bin_runtime + #computeValidJumpDests(Flopper_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("cage", .TypedArgs) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , 0 , Live , Junk_1 ) ) -Int Csstore( ISTANBUL , CALLER_ID , Vow , Junk_2 ) ) +Int -6351 ) ) + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flopper_bin_runtime + + (#Flopper.wards[CALLER_ID] |-> Ward) + (#Flopper.live |-> Live) + (#Flopper.vow |-> Vow) + ACCT_ID_STORAGE => + (#Flopper.wards[CALLER_ID] |-> Ward) + (#Flopper.live |-> 0) + (#Flopper.vow |-> CALLER_ID) + ACCT_ID_STORAGE + + + (#Flopper.live |-> Junk_1) + (#Flopper.vow |-> Junk_2) + ACCT_ID_ORIG_STORAGE + + _Nonce_Flopper => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeUInt(256, Ward) + andBool (#rangeUInt(256, Live) + andBool (#rangeAddress(Vow) + andBool (lengthBytes(CD) <=Int 1250000000 + andBool (#notPrecompileAddress(Vow) + andBool (#rangeUInt(256, Junk_1) + andBool (#rangeUInt(256, Junk_2) + andBool ((Ward ==Int 1) + andBool ((VCallValue ==Int 0)))))))))) + +endmodule diff --git a/tests/specs/mcd-structured/flopper-dent-guy-diff-tic-not-0-pass-rough-spec.k b/tests/specs/mcd-structured/flopper-dent-guy-diff-tic-not-0-pass-rough-spec.k new file mode 100644 index 0000000000..3f0b366ef7 --- /dev/null +++ b/tests/specs/mcd-structured/flopper-dent-guy-diff-tic-not-0-pass-rough-spec.k @@ -0,0 +1,508 @@ +requires "verification.k" + +module FLOPPER-DENT-GUY-DIFF-TIC-NOT-0-PASS-ROUGH-SPEC + imports VERIFICATION + + // Flopper_dent-guy-diff-tic-not-0 + claim [Flopper.dent-guy-diff-tic-not-0.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Flopper_bin_runtime + #computeValidJumpDests(Flopper_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("dent", #uint256(ABI_id), #uint256(ABI_lot), #uint256(ABI_bid)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flopper_bin_runtime + + (#Flopper.live |-> Live) + (#Flopper.vat |-> Vat) + (#Flopper.beg |-> Beg) + (#Flopper.ttl_tau |-> #WordPackUInt48UInt48(Ttl, Tau)) + (#Flopper.bids[ABI_id].bid |-> Bid) + (#Flopper.bids[ABI_id].lot |-> Lot) + (#Flopper.bids[ABI_id].guy_tic_end |-> #WordPackAddrUInt48UInt48(Guy, Tic, End)) + ACCT_ID_STORAGE => + (#Flopper.live |-> Live) + (#Flopper.vat |-> Vat) + (#Flopper.beg |-> Beg) + (#Flopper.ttl_tau |-> #WordPackUInt48UInt48(Ttl, Tau)) + (#Flopper.bids[ABI_id].bid |-> Bid) + (#Flopper.bids[ABI_id].lot |-> ABI_lot) + (#Flopper.bids[ABI_id].guy_tic_end |-> #WordPackAddrUInt48UInt48(CALLER_ID, TIME +Int Ttl, End)) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + Nonce_Flopper + _ + + + Vat + Vat_balance + Vat_bin_runtime + + (#Vat.can[CALLER_ID][ACCT_ID] |-> CanMove) + (#Vat.dai[CALLER_ID] |-> Dai_a) + (#Vat.dai[Guy] |-> Dai_g) + Vat_STORAGE => + (#Vat.can[CALLER_ID][ACCT_ID] |-> CanMove) + (#Vat.dai[CALLER_ID] |-> Dai_a -Int ABI_bid) + (#Vat.dai[Guy] |-> Dai_g +Int ABI_bid) + Vat_STORAGE + + Vat_ORIG_STORAGE + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Flopper) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeUInt(256, ABI_id) + andBool (#rangeUInt(256, ABI_lot) + andBool (#rangeUInt(256, ABI_bid) + andBool (#rangeUInt(256, Live) + andBool (#rangeAddress(Vat) + andBool (#rangeUInt(256, Beg) + andBool (#rangeUInt(48, Ttl) + andBool (#rangeUInt(48, Tau) + andBool (#rangeUInt(256, Bid) + andBool (#rangeUInt(256, Lot) + andBool (#rangeAddress(Guy) + andBool (#rangeUInt(48, Tic) + andBool (#rangeUInt(48, End) + andBool (#rangeUInt(256, CanMove) + andBool (#rangeUInt(256, Dai_a) + andBool (#rangeUInt(256, Dai_g) + andBool (#rangeUInt(256, Vat_balance) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((#notPrecompileAddress(Vat)) + andBool ((#notPrecompileAddress(Guy)) + andBool ((ACCT_ID =/=Int Vat) + andBool ((CALLER_ID =/=Int ACCT_ID) + andBool ((CALLER_ID =/=Int Guy) + andBool ((#rangeUInt(48, TIME)) + andBool ((Tic =/=Int 0) + andBool ((Vat =/=Int 0) + andBool ((((Live ==Int 1))) + andBool ((((Guy =/=Int 0))) + andBool ((((Tic >Int TIME))) + andBool ((((End >Int TIME))) + andBool ((((ABI_bid ==Int Bid))) + andBool ((((ABI_lot #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Flopper_bin_runtime + #computeValidJumpDests(Flopper_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x *Int ABI_y : WS + _ + 8685 => 8728 + #gas(VGas) => #if ABI_y ==Int 0 + #then #gas ( ( VGas +Int -54 ) ) + #else #gas ( ( VGas +Int -106 ) ) + #fi + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flopper_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + _ACCT_ID_ORIG_STORAGE + Nonce_Flopper + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Flopper) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 1000) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) + + [trusted] + + // Flopper_addu48u48 + claim [Flopper.addu48u48.pass]: + #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Flopper_bin_runtime + #computeValidJumpDests(Flopper_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS + _ + 8757 => 8798 + #gas(VGas) => #gas ( ( VGas +Int -66 ) ) + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flopper_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + _ACCT_ID_ORIG_STORAGE + Nonce_Flopper + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Flopper) + + andBool (#rangeUInt(48, ABI_x) + andBool (#rangeUInt(48, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(48, ABI_x +Int ABI_y))))))) + + [trusted] + + // Vat_move-diff + claim [Vat.move-diff.pass]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("move", #address(ABI_src), #address(ABI_dst), #uint256(ABI_rad)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Dai_src -Int ABI_rad ) , Dai_src , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Dai_dst +Int ABI_rad ) , Dai_dst , Junk_2 ) ) +Int -7943 ) ) + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.can[ABI_src][CALLER_ID] |-> May) + (#Vat.dai[ABI_src] |-> Dai_src) + (#Vat.dai[ABI_dst] |-> Dai_dst) + ACCT_ID_STORAGE => + (#Vat.can[ABI_src][CALLER_ID] |-> May) + (#Vat.dai[ABI_src] |-> (Dai_src -Int ABI_rad)) + (#Vat.dai[ABI_dst] |-> (Dai_dst +Int ABI_rad)) + ACCT_ID_STORAGE + + + (#Vat.dai[ABI_src] |-> Junk_1) + (#Vat.dai[ABI_dst] |-> Junk_2) + ACCT_ID_ORIG_STORAGE + + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeAddress(ABI_src) + andBool (#rangeAddress(ABI_dst) + andBool (#rangeUInt(256, ABI_rad) + andBool (#rangeUInt(256, Dai_dst) + andBool (#rangeUInt(256, Dai_src) + andBool (#rangeUInt(256, May) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((ABI_src =/=Int ABI_dst) + andBool (#rangeUInt(256, Junk_1) + andBool (#rangeUInt(256, Junk_2) + andBool ((((May ==Int 1 orBool ABI_src ==Int CALLER_ID))) + andBool (((VCallValue ==Int 0)) + andBool ((#rangeUInt(256, Dai_src -Int ABI_rad)) + andBool ((#rangeUInt(256, Dai_dst +Int ABI_rad)))))))))))))))) + + [trusted] + +endmodule diff --git a/tests/specs/mcd-structured/flopper-dent-guy-same-pass-rough-spec.k b/tests/specs/mcd-structured/flopper-dent-guy-same-pass-rough-spec.k new file mode 100644 index 0000000000..ebe3ce0bc4 --- /dev/null +++ b/tests/specs/mcd-structured/flopper-dent-guy-same-pass-rough-spec.k @@ -0,0 +1,351 @@ +requires "verification.k" + +module FLOPPER-DENT-GUY-SAME-PASS-ROUGH-SPEC + imports VERIFICATION + + // Flopper_dent-guy-same + claim [Flopper.dent-guy-same.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Flopper_bin_runtime + #computeValidJumpDests(Flopper_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("dent", #uint256(ABI_id), #uint256(ABI_lot), #uint256(ABI_bid)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flopper_bin_runtime + + (#Flopper.live |-> Live) + (#Flopper.vat |-> Vat) + (#Flopper.beg |-> Beg) + (#Flopper.ttl_tau |-> #WordPackUInt48UInt48(Ttl, Tau)) + (#Flopper.bids[ABI_id].bid |-> Bid) + (#Flopper.bids[ABI_id].lot |-> Lot) + (#Flopper.bids[ABI_id].guy_tic_end |-> #WordPackAddrUInt48UInt48(Guy, Tic, End)) + ACCT_ID_STORAGE => + (#Flopper.live |-> Live) + (#Flopper.vat |-> Vat) + (#Flopper.beg |-> Beg) + (#Flopper.ttl_tau |-> #WordPackUInt48UInt48(Ttl, Tau)) + (#Flopper.bids[ABI_id].bid |-> Bid) + (#Flopper.bids[ABI_id].lot |-> ABI_lot) + (#Flopper.bids[ABI_id].guy_tic_end |-> #WordPackAddrUInt48UInt48(Guy, TIME +Int Ttl, End)) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + _Nonce_Flopper => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeUInt(256, ABI_id) + andBool (#rangeUInt(256, ABI_lot) + andBool (#rangeUInt(256, ABI_bid) + andBool (#rangeUInt(256, Live) + andBool (#rangeAddress(Vat) + andBool (#rangeUInt(256, Beg) + andBool (#rangeUInt(48, Ttl) + andBool (#rangeUInt(48, Tau) + andBool (#rangeUInt(256, Bid) + andBool (#rangeUInt(256, Lot) + andBool (#rangeAddress(Guy) + andBool (#rangeUInt(48, Tic) + andBool (#rangeUInt(48, End) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((#notPrecompileAddress(Vat)) + andBool ((#notPrecompileAddress(Guy)) + andBool ((CALLER_ID =/=Int ACCT_ID) + andBool ((CALLER_ID ==Int Guy) + andBool ((#rangeUInt(48, TIME)) + andBool (((Live ==Int 1)) + andBool (((Guy =/=Int 0)) + andBool (((Tic >Int TIME orBool Tic ==Int 0)) + andBool (((End >Int TIME)) + andBool (((ABI_bid ==Int Bid)) + andBool (((ABI_lot #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Flopper_bin_runtime + #computeValidJumpDests(Flopper_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x *Int ABI_y : WS + _ + 8685 => 8728 + #gas(VGas) => #if ABI_y ==Int 0 + #then #gas ( ( VGas +Int -54 ) ) + #else #gas ( ( VGas +Int -106 ) ) + #fi + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flopper_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + ACCT_ID_ORIG_STORAGE + _Nonce_Flopper => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 1000) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) + + [trusted] + + // Flopper_addu48u48 + claim [Flopper.addu48u48.pass]: + #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Flopper_bin_runtime + #computeValidJumpDests(Flopper_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS + _ + 8757 => 8798 + #gas(VGas) => #gas ( ( VGas +Int -66 ) ) + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flopper_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + ACCT_ID_ORIG_STORAGE + _Nonce_Flopper => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeUInt(48, ABI_x) + andBool (#rangeUInt(48, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(48, ABI_x +Int ABI_y))))))) + + [trusted] + +endmodule diff --git a/tests/specs/mcd-structured/flopper-file-pass-rough-spec.k b/tests/specs/mcd-structured/flopper-file-pass-rough-spec.k new file mode 100644 index 0000000000..2fe125daf0 --- /dev/null +++ b/tests/specs/mcd-structured/flopper-file-pass-rough-spec.k @@ -0,0 +1,127 @@ +requires "verification.k" + +module FLOPPER-FILE-PASS-ROUGH-SPEC + imports VERIFICATION + + // Flopper_file + claim [Flopper.file.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Flopper_bin_runtime + #computeValidJumpDests(Flopper_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("file", #bytes32(ABI_what), #uint256(ABI_data)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flopper_bin_runtime + + (#Flopper.wards[CALLER_ID] |-> May) + (#Flopper.beg |-> Beg) + (#Flopper.pad |-> Pad) + (#Flopper.ttl_tau |-> #WordPackUInt48UInt48(Ttl, Tau)) + ACCT_ID_STORAGE => + (#Flopper.wards[CALLER_ID] |-> May) + (#Flopper.beg |-> #if ABI_what ==Int #string2Word("beg") #then ABI_data #else Beg #fi) + (#Flopper.pad |-> #if ABI_what ==Int #string2Word("pad") #then ABI_data #else Pad #fi) + // TODO: this should replace `?NEW_ACCT_ID_STORAGE` once booster map unification improves + // (#Flopper.ttl_tau |-> #if ABI_what ==Int #string2Word("ttl") #then #WordPackUInt48UInt48(maxUInt48 &Int ABI_data, Tau) #else (#if ABI_what ==Int #string2Word("tau") #then #WordPackUInt48UInt48(Ttl, maxUInt48 &Int ABI_data) #else #WordPackUInt48UInt48(Ttl, Tau) #fi) #fi) + // ACCT_ID_STORAGE + ?NEW_ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + _Nonce_Flopper => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeBytes(32, ABI_what) + andBool (#rangeUInt(256, ABI_data) + andBool (#rangeUInt(256, May) + andBool (#rangeUInt(256, Beg) + andBool (#rangeUInt(256, Pad) + andBool (#rangeUInt(48, Ttl) + andBool (#rangeUInt(48, Tau) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((May ==Int 1) + andBool ((VCallValue ==Int 0) + andBool (((ABI_what ==Int #string2Word("beg")) orBool (ABI_what ==Int #string2Word("pad")) orBool (ABI_what ==Int #string2Word("ttl")) orBool (ABI_what ==Int #string2Word("tau")))))))))))))) + + // TODO: This should be removed once booster map unification improves + ensures #lookup(?NEW_ACCT_ID_STORAGE, #Flopper.ttl_tau) ==Int #if ABI_what ==Int #string2Word("ttl") #then #WordPackUInt48UInt48(maxUInt48 &Int ABI_data, Tau) #else (#if ABI_what ==Int #string2Word("tau") #then #WordPackUInt48UInt48(Ttl, maxUInt48 &Int ABI_data) #else #WordPackUInt48UInt48(Ttl, Tau) #fi) #fi + +endmodule diff --git a/tests/specs/mcd-structured/flopper-kick-pass-rough-spec.k b/tests/specs/mcd-structured/flopper-kick-pass-rough-spec.k new file mode 100644 index 0000000000..24525da42e --- /dev/null +++ b/tests/specs/mcd-structured/flopper-kick-pass-rough-spec.k @@ -0,0 +1,239 @@ +requires "verification.k" + +module FLOPPER-KICK-PASS-ROUGH-SPEC + imports VERIFICATION + + // Flopper_kick + claim [Flopper.kick.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => #buf(32, 1 +Int Kicks) + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Flopper_bin_runtime + #computeValidJumpDests(Flopper_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("kick", #address(ABI_gal), #uint256(ABI_lot), #uint256(ABI_bid)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flopper_bin_runtime + + (#Flopper.wards[CALLER_ID] |-> Ward) + (#Flopper.live |-> Live) + (#Flopper.kicks |-> Kicks) + (#Flopper.ttl_tau |-> #WordPackUInt48UInt48(Ttl, Tau)) + (#Flopper.bids[1 +Int Kicks].bid |-> Old_bid) + (#Flopper.bids[1 +Int Kicks].lot |-> Old_lot) + (#Flopper.bids[1 +Int Kicks].guy_tic_end |-> #WordPackAddrUInt48UInt48(Old_guy, Old_tic, Old_end)) + ACCT_ID_STORAGE => + (#Flopper.wards[CALLER_ID] |-> Ward) + (#Flopper.live |-> Live) + (#Flopper.kicks |-> 1 +Int Kicks) + (#Flopper.ttl_tau |-> #WordPackUInt48UInt48(Ttl, Tau)) + (#Flopper.bids[1 +Int Kicks].bid |-> ABI_bid) + (#Flopper.bids[1 +Int Kicks].lot |-> ABI_lot) + (#Flopper.bids[1 +Int Kicks].guy_tic_end |-> #WordPackAddrUInt48UInt48(ABI_gal, Old_tic, TIME +Int Tau)) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + _Nonce_Flopper => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeAddress(ABI_gal) + andBool (#rangeUInt(256, ABI_lot) + andBool (#rangeUInt(256, ABI_bid) + andBool (#rangeUInt(256, Live) + andBool (#rangeUInt(256, Kicks) + andBool (#rangeUInt(48, Ttl) + andBool (#rangeUInt(48, Tau) + andBool (#rangeUInt(256, Old_lot) + andBool (#rangeUInt(256, Old_bid) + andBool (#rangeAddress(Old_guy) + andBool (#rangeUInt(48, Old_tic) + andBool (#rangeUInt(48, Old_end) + andBool (#rangeUInt(256, Ward) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((#notPrecompileAddress(Old_guy)) + andBool ((#rangeUInt(48, TIME)) + andBool ((((Ward ==Int 1))) + andBool ((((Live ==Int 1))) + andBool ((((VCallValue ==Int 0))) + andBool (((#rangeUInt(256, Kicks +Int 1))) + andBool ((#rangeUInt(48, TIME +Int Tau))))))))))))))))))))))) + + // Flopper_addu48u48 + claim [Flopper.addu48u48.pass]: + #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Flopper_bin_runtime + #computeValidJumpDests(Flopper_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS + _ + 8757 => 8798 + #gas(VGas) => #gas ( ( VGas +Int -66 ) ) + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flopper_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + ACCT_ID_ORIG_STORAGE + _Nonce_Flopper => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeUInt(48, ABI_x) + andBool (#rangeUInt(48, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(48, ABI_x +Int ABI_y))))))) + + [trusted] + +endmodule diff --git a/tests/specs/mcd-structured/flopper-tick-pass-rough-spec.k b/tests/specs/mcd-structured/flopper-tick-pass-rough-spec.k new file mode 100644 index 0000000000..2ce0f1be57 --- /dev/null +++ b/tests/specs/mcd-structured/flopper-tick-pass-rough-spec.k @@ -0,0 +1,228 @@ +requires "verification.k" + +module FLOPPER-TICK-PASS-ROUGH-SPEC + imports VERIFICATION + + // Flopper_tick + claim [Flopper.tick.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Flopper_bin_runtime + #computeValidJumpDests(Flopper_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("tick", #uint256(ABI_id)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flopper_bin_runtime + + (#Flopper.pad |-> Pad) + (#Flopper.ttl_tau |-> #WordPackUInt48UInt48(Ttl, Tau)) + (#Flopper.bids[ABI_id].lot |-> Lot) + (#Flopper.bids[ABI_id].guy_tic_end |-> #WordPackAddrUInt48UInt48(Guy, Tic, End)) + ACCT_ID_STORAGE => + (#Flopper.pad |-> Pad) + (#Flopper.ttl_tau |-> #WordPackUInt48UInt48(Ttl, Tau)) + (#Flopper.bids[ABI_id].lot |-> (Pad *Int Lot) /Int #Wad) + (#Flopper.bids[ABI_id].guy_tic_end |-> #WordPackAddrUInt48UInt48(Guy, Tic, TIME +Int Tau)) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + _Nonce_Flopper => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeUInt(256, ABI_id) + andBool (#rangeUInt(256, Pad) + andBool (#rangeUInt(48, Ttl) + andBool (#rangeUInt(48, Tau) + andBool (#rangeUInt(256, Lot) + andBool (#rangeAddress(Guy) + andBool (#rangeUInt(48, Tic) + andBool (#rangeUInt(48, End) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((#notPrecompileAddress(Guy)) + andBool ((#rangeUInt(48, TIME)) + andBool (((VCallValue ==Int 0)) + andBool (((Tic ==Int 0)) + andBool (((End #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Flopper_bin_runtime + #computeValidJumpDests(Flopper_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS + _ + 8757 => 8798 + #gas(VGas) => #gas ( ( VGas +Int -66 ) ) + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Flopper_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + ACCT_ID_ORIG_STORAGE + _Nonce_Flopper => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeUInt(48, ABI_x) + andBool (#rangeUInt(48, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(48, ABI_x +Int ABI_y))))))) + + [trusted] + +endmodule diff --git a/tests/specs/mcd-structured/functional-spec.k b/tests/specs/mcd-structured/functional-spec.k new file mode 100644 index 0000000000..813109bba0 --- /dev/null +++ b/tests/specs/mcd-structured/functional-spec.k @@ -0,0 +1,119 @@ +requires "verification.k" + +module FUNCTIONAL-SPEC-SYNTAX + imports VERIFICATION + + syntax KItem ::= runLemma ( Step ) [symbol(runLemma)] | doneLemma ( Step ) + // ------------------------------------------------------- + rule runLemma(S) => doneLemma(S) ... + + syntax Step ::= Bool | Int | Bytes + // ---------------------------------- + +endmodule + +module FUNCTIONAL-SPEC + imports FUNCTIONAL-SPEC-SYNTAX + + // Arithmetic + + claim runLemma((X +Int pow256) -Int chop(Y)) => doneLemma(X -Int Y) ... + requires #rangeUInt(256, X) + andBool #rangeSInt(256, Y) + andBool Y runLemma(chop(Art_i *Int (ABI_rate +Int pow256))) => doneLemma(chop(Art_i *Int ABI_rate)) ... + requires #rangeUInt(256, Art_i) + andBool Art_i <=Int maxSInt256 + andBool #rangeSInt(256, Art_i *Int ABI_rate) + + claim runLemma(maxUInt48 &Int ABI_x <=Int maxUInt48 &Int ABI_x +Int ABI_y) => doneLemma(false) ... + requires #rangeUInt(48, ABI_x) + andBool #rangeUInt(48, ABI_y) + andBool notBool #rangeUInt(48, ABI_x +Int ABI_y) + + claim runLemma( (maxUInt48 &Int W1) +Int (maxUInt160 &Int W2) ) => doneLemma( A +Int C ) ... + requires (W1 ==Int #WordPackUInt48UInt48(A, B)) + andBool (W2 ==Int #WordPackAddrUInt48UInt48(C, D, E)) + andBool #rangeUInt(48, A) andBool #rangeUInt(48, B) + andBool #rangeAddress(C) andBool #rangeUInt(48, D) andBool #rangeUInt(48, E) + + claim runLemma(bool2Word(ABI_src:Int ==Int CALLER_ID:Int) |Int bool2Word(X)) => doneLemma(bool2Word(ABI_src ==Int CALLER_ID orBool X)) ... + requires #rangeUInt(256, ABI_src) + andBool #rangeUInt(256, CALLER_ID) + + claim runLemma(bool2Word(ABI_src ==Int CALLER_ID orBool X) ==Int 0) => doneLemma(notBool(ABI_src ==Int CALLER_ID orBool X)) ... + requires #rangeUInt(256, ABI_src) + andBool #rangeUInt(256, CALLER_ID) + + claim runLemma( chop( A -Int B ) <=Int A ) => doneLemma( false ) ... + requires #rangeUInt(256, A) andBool #rangeUInt(256, B) andBool A -Int B runLemma((GAL |Int (notMaxUInt160 &Int GUY_TIC_END)) modInt pow256) => doneLemma(GAL |Int (notMaxUInt160 &Int GUY_TIC_END)) ... + requires #rangeUInt(256, GUY_TIC_END) + andBool #rangeAddress(GAL) + + claim runLemma(TIME +Int (TTL_TAU /Int pow48)) => doneLemma(TIME +Int TAU) ... + requires TTL_TAU ==Int #WordPackUInt48UInt48(TTL, TAU) + andBool #rangeUInt(48, TTL) andBool #rangeUInt(48, TAU) + + claim runLemma(maxUInt48 &Int ((GAL |Int (notMaxUInt160 &Int GUY_TIC_END)) /Int pow160)) => doneLemma(TIC) ... + requires GUY_TIC_END ==Int #WordPackAddrUInt48UInt48(GUY, TIC, END) + andBool #rangeAddress(GAL) andBool #rangeAddress(GUY) andBool #rangeUInt(48, TIC) andBool #rangeUInt(48, END) + + claim runLemma(maxUInt160 &Int (GAL |Int (notMaxUInt160 &Int GUY_TIC_END))) => doneLemma(GAL) ... + requires GUY_TIC_END ==Int #WordPackAddrUInt48UInt48(GUY, TIC, END) + andBool #rangeAddress(GAL) andBool #rangeAddress(GUY) andBool #rangeUInt(48, TIC) andBool #rangeUInt(48, END) + + claim [wordPackSimplify1]: runLemma((((TIME +Int (maxUInt48 &Int (TTL_TAU /Int pow48))) *Int pow208) |Int (maxUInt208 &Int (GAL |Int (notMaxUInt160 &Int GUY_TIC_END))))) => doneLemma(#WordPackAddrUInt48UInt48(GAL, TIC, TIME +Int TAU)) ... + requires TTL_TAU ==Int #WordPackUInt48UInt48(TTL, TAU) + andBool GUY_TIC_END ==Int #WordPackAddrUInt48UInt48(GUY, TIC, END) + andBool #rangeAddress(GAL) andBool #rangeUInt(48, TTL) andBool #rangeUInt(48, TAU) andBool #rangeUInt(48, TIME +Int TAU) + andBool #rangeAddress(GUY) andBool #rangeUInt(48, TIC) andBool #rangeUInt(48, END) + + claim [wordPackSimplify2]: runLemma((((TIME +Int (maxUInt48 &Int TTL_TAU)) *Int pow160) |Int (115792089237315784047431654708638870748305248246218003188207458632603225030655 &Int GUY_TIC_END))) => doneLemma(#WordPackAddrUInt48UInt48(GUY, TIME +Int TTL, END)) ... + requires TTL_TAU ==Int #WordPackUInt48UInt48(TTL, TAU) + andBool GUY_TIC_END ==Int #WordPackAddrUInt48UInt48(GUY, TIC, END) + andBool #rangeUInt(48, TTL) andBool #rangeUInt(48, TAU) andBool #rangeUInt(48, TIME +Int TTL) + andBool #rangeAddress(GUY) andBool #rangeUInt(48, TIC) andBool #rangeUInt(48, END) + + claim runLemma(TIME +Int ( maxUInt48 &Int #lookup ( ((6 |-> #WordPackUInt48UInt48(Junk, Tau)) ACCT_ID_STORAGE) [ keccak ( #buf ( 32 , ABI_id ) +Bytes X ) +Int 1 <- #lookup ( ACCT_ID_STORAGE , 5 ) *Int #lookup ( ACCT_ID_STORAGE , keccak ( #buf ( 32 , ABI_id ) +Bytes X ) +Int 1 ) /Int 1000000000000000000 ] , 6 ) /Int pow48 ) doneLemma(true) ... + requires #rangeUInt(48, Junk) andBool #rangeUInt(48, Tau) andBool #rangeUInt(48, TIME +Int Tau) + + claim [bytesDisjointSetCommutative1]: runLemma( ACCT_ID_STORAGE [ keccak ( #buf ( 32 , ABI_id ) +Bytes X) +Int 1 <- ABI_lot:Int ] [ keccak ( #buf ( 32 , ABI_id ) +Bytes X) +Int 2 <- #WordPackAddrUInt48UInt48 ( CALLER_ID , TIME +Int ( maxUInt48 &Int #lookup ( ACCT_ID_STORAGE , 6 ) ) , #lookup ( ACCT_ID_STORAGE , keccak ( #buf ( 32 , ABI_id ) +Bytes X) +Int 2 ) /Int pow208 ) ] + ==K + ACCT_ID_STORAGE [ keccak ( #buf ( 32 , ABI_id ) +Bytes X) +Int 2 <- #WordPackAddrUInt48UInt48 ( CALLER_ID , TIME +Int ( maxUInt48 &Int #lookup ( ACCT_ID_STORAGE , 6 ) ) , #lookup ( ACCT_ID_STORAGE , keccak ( #buf ( 32 , ABI_id ) +Bytes X) +Int 2 ) /Int pow208 ) ] [ keccak ( #buf ( 32 , ABI_id ) +Bytes X) +Int 1 <- ABI_lot:Int ]) + => doneLemma(true) ... + + // Memory operations + + claim runLemma( M:Bytes [ 132 := #buf(32, B11) ] [ 128 := #buf(32, B21) +Bytes #buf(32, B22) ] ) => doneLemma( M [ 128 := (#buf(32, B21) +Bytes #buf(32, B22)) ] ) ... + requires #rangeUInt(256, B11) andBool #rangeUInt(256, B21) andBool #rangeUInt(256, B22) + + // keccak + + claim [keccak-neq]: + runLemma ( + keccak ( #buf ( 32 , ABI_u:Int ) +Bytes #buf ( 32 , keccak ( #buf ( 32 , ABI_i:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" ) ) ) +Int 1 + ==Int + keccak ( #buf ( 32 , ABI_i:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" ) +Int 1 + ) => doneLemma( + false + ) ... + + claim [lookup-keccak-neq]: + runLemma ( + #lookup ( + ( ( keccak ( #buf ( 32 , ABI_u:Int ) +Bytes #buf ( 32 , keccak ( #buf ( 32 , ABI_i:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" ) ) ) +Int 1 ) |-> Urn_art:Int ) + ACCT_ID_STORAGE:Map, + ( keccak ( #buf ( 32 , ABI_i:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" ) +Int 1 ) ) + ) => doneLemma( + #lookup ( + ACCT_ID_STORAGE:Map, + ( keccak ( #buf ( 32 , ABI_i:Int ) +Bytes b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" ) +Int 1 ) ) + ) ... + +endmodule diff --git a/tests/specs/mcd-structured/pot-join-pass-rough-spec.k b/tests/specs/mcd-structured/pot-join-pass-rough-spec.k new file mode 100644 index 0000000000..03fabb3380 --- /dev/null +++ b/tests/specs/mcd-structured/pot-join-pass-rough-spec.k @@ -0,0 +1,488 @@ +requires "verification.k" + +module POT-JOIN-PASS-ROUGH-SPEC + imports VERIFICATION + + // Pot_join + claim [Pot.join.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Pot_bin_runtime + #computeValidJumpDests(Pot_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("join", #uint256(ABI_wad)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Pot_bin_runtime + + (#Pot.pie[CALLER_ID] |-> Pie_u) + (#Pot.Pie |-> Pie_tot) + (#Pot.chi |-> Chi) + (#Pot.rho |-> Rho) + (#Pot.vat |-> Vat) + ACCT_ID_STORAGE => + (#Pot.pie[CALLER_ID] |-> Pie_u +Int ABI_wad) + (#Pot.Pie |-> Pie_tot +Int ABI_wad) + (#Pot.chi |-> Chi) + (#Pot.rho |-> Rho) + (#Pot.vat |-> Vat) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + Nonce_Pot + _ + + + Vat + Vat_balance + Vat_bin_runtime + + (#Vat.can[CALLER_ID][ACCT_ID] |-> Can) + (#Vat.dai[CALLER_ID] |-> Dai_u) + (#Vat.dai[ACCT_ID] |-> Dai_p) + Vat_STORAGE => + (#Vat.can[CALLER_ID][ACCT_ID] |-> Can) + (#Vat.dai[CALLER_ID] |-> Dai_u -Int Chi *Int ABI_wad) + (#Vat.dai[ACCT_ID] |-> Dai_p +Int Chi *Int ABI_wad) + Vat_STORAGE + + Vat_ORIG_STORAGE + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Pot) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeUInt(256, ABI_wad) + andBool (#rangeUInt(256, Pie_u) + andBool (#rangeUInt(256, Pie_tot) + andBool (#rangeUInt(256, Chi) + andBool (#rangeUInt(256, Rho) + andBool (#rangeAddress(Vat) + andBool (#rangeUInt(256, Can) + andBool (#rangeUInt(256, Dai_u) + andBool (#rangeUInt(256, Dai_p) + andBool (#rangeUInt(256, Vat_balance) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((#notPrecompileAddress(Vat)) + andBool ((ACCT_ID =/=Int Vat) + andBool ((ACCT_ID =/=Int CALLER_ID) + andBool ((Vat =/=Int 0) + andBool (((VCallValue ==Int 0)) + andBool (((VCallDepth #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Pot_bin_runtime + #computeValidJumpDests(Pot_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS + _ + 4851 => 4876 + #gas(VGas) => #gas ( ( VGas +Int -54 ) ) + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Pot_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + _ACCT_ID_ORIG_STORAGE + Nonce_Pot + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Pot) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) + + [trusted] + + // Pot_muluu + claim [Pot.muluu.pass]: + #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Pot_bin_runtime + #computeValidJumpDests(Pot_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x *Int ABI_y : WS + _ + 4877 => 4920 + #gas(VGas) => #if ABI_y ==Int 0 + #then #gas ( ( VGas +Int -54 ) ) + #else #gas ( ( VGas +Int -106 ) ) + #fi + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Pot_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + _ACCT_ID_ORIG_STORAGE + Nonce_Pot + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Pot) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 1000) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) + + [trusted] + + // Vat_move-diff + claim [Vat.move-diff.pass]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("move", #address(ABI_src), #address(ABI_dst), #uint256(ABI_rad)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Dai_src -Int ABI_rad ) , Dai_src , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Dai_dst +Int ABI_rad ) , Dai_dst , Junk_2 ) ) +Int -7943 ) ) + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.can[ABI_src][CALLER_ID] |-> May) + (#Vat.dai[ABI_src] |-> Dai_src) + (#Vat.dai[ABI_dst] |-> Dai_dst) + ACCT_ID_STORAGE => + (#Vat.can[ABI_src][CALLER_ID] |-> May) + (#Vat.dai[ABI_src] |-> (Dai_src -Int ABI_rad)) + (#Vat.dai[ABI_dst] |-> (Dai_dst +Int ABI_rad)) + ACCT_ID_STORAGE + + + (#Vat.dai[ABI_src] |-> Junk_1) + (#Vat.dai[ABI_dst] |-> Junk_2) + ACCT_ID_ORIG_STORAGE + + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeAddress(ABI_src) + andBool (#rangeAddress(ABI_dst) + andBool (#rangeUInt(256, ABI_rad) + andBool (#rangeUInt(256, Dai_dst) + andBool (#rangeUInt(256, Dai_src) + andBool (#rangeUInt(256, May) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((ABI_src =/=Int ABI_dst) + andBool (#rangeUInt(256, Junk_1) + andBool (#rangeUInt(256, Junk_2) + andBool ((((May ==Int 1 orBool ABI_src ==Int CALLER_ID))) + andBool (((VCallValue ==Int 0)) + andBool ((#rangeUInt(256, Dai_src -Int ABI_rad)) + andBool ((#rangeUInt(256, Dai_dst +Int ABI_rad)))))))))))))))) + + [trusted] + +endmodule diff --git a/tests/specs/mcd-structured/storage.k b/tests/specs/mcd-structured/storage.k new file mode 100644 index 0000000000..534eb0c84f --- /dev/null +++ b/tests/specs/mcd-structured/storage.k @@ -0,0 +1,375 @@ +requires "edsl.md" + +module DSS-STORAGE + imports EDSL + + // ### Vat + // ------- + + syntax Int ::= "#Vat.wards" "[" Int "]" [macro] + | "#Vat.can" "[" Int "][" Int "]" [macro] + | "#Vat.ilks" "[" Int "].Art" [macro] + | "#Vat.ilks" "[" Int "].rate" [macro] + | "#Vat.ilks" "[" Int "].spot" [macro] + | "#Vat.ilks" "[" Int "].line" [macro] + | "#Vat.ilks" "[" Int "].dust" [macro] + | "#Vat.urns" "[" Int "][" Int "].ink" [macro] + | "#Vat.urns" "[" Int "][" Int "].art" [macro] + | "#Vat.gem" "[" Int "][" Int "]" [macro] + | "#Vat.dai" "[" Int "]" [macro] + | "#Vat.sin" "[" Int "]" [macro] + | "#Vat.debt" [macro] + | "#Vat.vice" [macro] + | "#Vat.Line" [macro] + | "#Vat.live" [macro] + // ----------------------------------------------------------- + rule #Vat.wards[A] => #hashedLocation("Solidity", 0, A) + rule #Vat.can[A][B] => #hashedLocation("Solidity", 1, A B) + rule #Vat.ilks[ILK].Art => #hashedLocation("Solidity", 2, ILK) +Int 0 + rule #Vat.ilks[ILK].rate => #hashedLocation("Solidity", 2, ILK) +Int 1 + rule #Vat.ilks[ILK].spot => #hashedLocation("Solidity", 2, ILK) +Int 2 + rule #Vat.ilks[ILK].line => #hashedLocation("Solidity", 2, ILK) +Int 3 + rule #Vat.ilks[ILK].dust => #hashedLocation("Solidity", 2, ILK) +Int 4 + rule #Vat.urns[ILK][USR].ink => #hashedLocation("Solidity", 3, ILK USR) + rule #Vat.urns[ILK][USR].art => #hashedLocation("Solidity", 3, ILK USR) +Int 1 + rule #Vat.gem[ILK][USR] => #hashedLocation("Solidity", 4, ILK USR) + rule #Vat.dai[A] => #hashedLocation("Solidity", 5, A) + rule #Vat.sin[A] => #hashedLocation("Solidity", 6, A) + rule #Vat.debt => 7 + rule #Vat.vice => 8 + rule #Vat.Line => 9 + rule #Vat.live => 10 + + // ### Dai + // ------- + + syntax Int ::= "#Dai.wards" "[" Int "]" [macro] + | "#Dai.totalSupply" [macro] + | "#Dai.balanceOf" "[" Int "]" [macro] + | "#Dai.allowance" "[" Int "][" Int "]" [macro] + | "#Dai.nonces" "[" Int "]" [macro] + | "#Dai.DOMAIN_SEPARATOR" [macro] + // ------------------------------------------------------------ + rule #Dai.wards[A] => #hashedLocation("Solidity", 0, A) + rule #Dai.totalSupply => 1 + rule #Dai.balanceOf[A] => #hashedLocation("Solidity", 2, A) + rule #Dai.allowance[A][B] => #hashedLocation("Solidity", 3, A B) + rule #Dai.nonces[A] => #hashedLocation("Solidity", 4, A) + rule #Dai.DOMAIN_SEPARATOR => 5 + + // ### Jug + // ------- + + syntax Int ::= "#Jug.wards" "[" Int "]" [macro] + | "#Jug.ilks" "[" Int "].duty" [macro] + | "#Jug.ilks" "[" Int "].rho" [macro] + | "#Jug.vat" [macro] + | "#Jug.vow" [macro] + | "#Jug.base" [macro] + // --------------------------------------------------- + rule #Jug.wards[A] => #hashedLocation("Solidity", 0, A) + rule #Jug.ilks[ILK].duty => #hashedLocation("Solidity", 1, ILK) +Int 0 + rule #Jug.ilks[ILK].rho => #hashedLocation("Solidity", 1, ILK) +Int 1 + rule #Jug.vat => 2 + rule #Jug.vow => 3 + rule #Jug.base => 4 + + // ### Drip + // -------- + + syntax Int ::= "#Drip.wards" "[" Int "]" [macro] + | "#Drip.ilks" "[" Int "].tax" [macro] + | "#Drip.ilks" "[" Int "].rho" [macro] + | "#Drip.vat" [macro] + | "#Drip.vow" [macro] + | "#Drip.repo" [macro] + // --------------------------------------------------- + rule #Drip.wards[A] => #hashedLocation("Solidity", 0, A) + rule #Drip.ilks[ILK].tax => #hashedLocation("Solidity", 1, ILK) +Int 0 + rule #Drip.ilks[ILK].rho => #hashedLocation("Solidity", 1, ILK) +Int 1 + rule #Drip.vat => 2 + rule #Drip.vow => 3 + rule #Drip.repo => 4 + + // ### Vow + // ------- + + syntax Int ::= "#Vow.wards" "[" Int "]" [macro] + | "#Vow.vat" [macro] + | "#Vow.flapper" [macro] + | "#Vow.flopper" [macro] + | "#Vow.sin" "[" Int "]" [macro] + | "#Vow.Sin" [macro] + | "#Vow.Ash" [macro] + | "#Vow.wait" [macro] + | "#Vow.dump" [macro] + | "#Vow.sump" [macro] + | "#Vow.bump" [macro] + | "#Vow.hump" [macro] + | "#Vow.live" [macro] + // ----------------------------------------------- + rule #Vow.wards[A] => #hashedLocation("Solidity", 0, A) + rule #Vow.vat => 1 + rule #Vow.flapper => 2 + rule #Vow.flopper => 3 + rule #Vow.sin[A] => #hashedLocation("Solidity", 4, A) + rule #Vow.Sin => 5 + rule #Vow.Ash => 6 + rule #Vow.wait => 7 + rule #Vow.dump => 8 + rule #Vow.sump => 9 + rule #Vow.bump => 10 + rule #Vow.hump => 11 + rule #Vow.live => 12 + + // ### Cat + // ------- + + syntax Int ::= "#Cat.wards" "[" Int "]" [macro] + | "#Cat.ilks" "[" Int "].flip" [macro] + | "#Cat.ilks" "[" Int "].chop" [macro] + | "#Cat.ilks" "[" Int "].lump" [macro] + | "#Cat.live" [macro] + | "#Cat.vat" [macro] + | "#Cat.vow" [macro] + // --------------------------------------------------- + rule #Cat.wards[A] => #hashedLocation("Solidity", 0, A) + rule #Cat.ilks[ILK].flip => #hashedLocation("Solidity", 1, ILK) +Int 0 + rule #Cat.ilks[ILK].chop => #hashedLocation("Solidity", 1, ILK) +Int 1 + rule #Cat.ilks[ILK].lump => #hashedLocation("Solidity", 1, ILK) +Int 2 + rule #Cat.live => 2 + rule #Cat.vat => 3 + rule #Cat.vow => 4 + + // ### GemJoin + // ----------- + + syntax Int ::= "#GemJoin.wards" "[" Int "]" [macro] + | "#GemJoin.vat" [macro] + | "#GemJoin.ilk" [macro] + | "#GemJoin.gem" [macro] + | "#GemJoin.dec" [macro] + | "#GemJoin.live" [macro] + // --------------------------------------------------- + rule #GemJoin.wards[A] => #hashedLocation("Solidity", 0, A) + rule #GemJoin.vat => 1 + rule #GemJoin.ilk => 2 + rule #GemJoin.gem => 3 + rule #GemJoin.dec => 4 + rule #GemJoin.live => 5 + + // ### DaiJoin + // ----------- + + syntax Int ::= "#DaiJoin.wards" "[" Int "]" [macro] + | "#DaiJoin.vat" [macro] + | "#DaiJoin.dai" [macro] + | "#DaiJoin.live" [macro] + // --------------------------------------------------- + rule #DaiJoin.wards[A] => #hashedLocation("Solidity", 0, A) + rule #DaiJoin.vat => 1 + rule #DaiJoin.dai => 2 + rule #DaiJoin.live => 3 + + // ### Flip + // -------- + + syntax Int ::= "#Flipper.wards" "[" Int "]" [macro] + | "#Flipper.bids" "[" Int "].bid" [macro] + | "#Flipper.bids" "[" Int "].lot" [macro] + | "#Flipper.bids" "[" Int "].guy_tic_end" [macro] + | "#Flipper.bids" "[" Int "].usr" [macro] + | "#Flipper.bids" "[" Int "].gal" [macro] + | "#Flipper.bids" "[" Int "].tab" [macro] + | "#Flipper.vat" [macro] + | "#Flipper.ilk" [macro] + | "#Flipper.beg" [macro] + | "#Flipper.ttl_tau" [macro] + | "#Flipper.kicks" [macro] + // -------------------------------------------------------------- + rule #Flipper.wards[A] => #hashedLocation("Solidity", 0, A) + rule #Flipper.bids[N].bid => #hashedLocation("Solidity", 1, N) +Int 0 + rule #Flipper.bids[N].lot => #hashedLocation("Solidity", 1, N) +Int 1 + rule #Flipper.bids[N].guy_tic_end => #hashedLocation("Solidity", 1, N) +Int 2 + rule #Flipper.bids[N].usr => #hashedLocation("Solidity", 1, N) +Int 3 + rule #Flipper.bids[N].gal => #hashedLocation("Solidity", 1, N) +Int 4 + rule #Flipper.bids[N].tab => #hashedLocation("Solidity", 1, N) +Int 5 + rule #Flipper.vat => 2 + rule #Flipper.ilk => 3 + rule #Flipper.beg => 4 + rule #Flipper.ttl_tau => 5 + rule #Flipper.kicks => 6 + + // ### Flop + // -------- + + syntax Int ::= "#Flopper.wards" "[" Int "]" [macro] + | "#Flopper.bids" "[" Int "].bid" [macro] + | "#Flopper.bids" "[" Int "].lot" [macro] + | "#Flopper.bids" "[" Int "].guy_tic_end" [macro] + | "#Flopper.vat" [macro] + | "#Flopper.gem" [macro] + | "#Flopper.beg" [macro] + | "#Flopper.pad" [macro] + | "#Flopper.ttl_tau" [macro] + | "#Flopper.kicks" [macro] + | "#Flopper.live" [macro] + | "#Flopper.vow" [macro] + // -------------------------------------------------------------- + rule #Flopper.wards[A] => #hashedLocation("Solidity", 0, A) + rule #Flopper.bids[N].bid => #hashedLocation("Solidity", 1, N) +Int 0 + rule #Flopper.bids[N].lot => #hashedLocation("Solidity", 1, N) +Int 1 + rule #Flopper.bids[N].guy_tic_end => #hashedLocation("Solidity", 1, N) +Int 2 + rule #Flopper.vat => 2 + rule #Flopper.gem => 3 + rule #Flopper.beg => 4 + rule #Flopper.pad => 5 + rule #Flopper.ttl_tau => 6 + rule #Flopper.kicks => 7 + rule #Flopper.live => 8 + rule #Flopper.vow => 9 + + // ### Flap + // -------- + + syntax Int ::= "#Flapper.wards" "[" Int "]" [macro] + | "#Flapper.bids" "[" Int "].bid" [macro] + | "#Flapper.bids" "[" Int "].lot" [macro] + | "#Flapper.bids" "[" Int "].guy_tic_end" [macro] + | "#Flapper.vat" [macro] + | "#Flapper.gem" [macro] + | "#Flapper.beg" [macro] + | "#Flapper.ttl_tau" [macro] + | "#Flapper.kicks" [macro] + | "#Flapper.live" [macro] + // -------------------------------------------------------------- + rule #Flapper.wards[A] => #hashedLocation("Solidity", 0, A) + rule #Flapper.bids[N].bid => #hashedLocation("Solidity", 1, N) +Int 0 + rule #Flapper.bids[N].lot => #hashedLocation("Solidity", 1, N) +Int 1 + rule #Flapper.bids[N].guy_tic_end => #hashedLocation("Solidity", 1, N) +Int 2 + rule #Flapper.vat => 2 + rule #Flapper.gem => 3 + rule #Flapper.beg => 4 + rule #Flapper.ttl_tau => 5 + rule #Flapper.kicks => 6 + rule #Flapper.live => 7 + + // ### GemLike + // ----------- + + syntax Int ::= "#Gem.balances" "[" Int "]" [macro] + | "#Gem.stopped" [macro] + | "#Gem.allowance" "[" Int "][" Int "]" [macro] + // ------------------------------------------------------------ + rule #Gem.balances[A] => #hashedLocation("Solidity", 3, A) + rule #Gem.stopped => 4 + rule #Gem.allowance[A][B] => #hashedLocation("Solidity", 8, A B) + + // ### End + // ------- + + syntax Int ::= "#End.wards" "[" Int "]" [macro] + | "#End.vat" [macro] + | "#End.cat" [macro] + | "#End.vow" [macro] + | "#End.pot" [macro] + | "#End.spot" [macro] + | "#End.live" [macro] + | "#End.when" [macro] + | "#End.wait" [macro] + | "#End.debt" [macro] + | "#End.tag" "[" Int "]" [macro] + | "#End.gap" "[" Int "]" [macro] + | "#End.Art" "[" Int "]" [macro] + | "#End.fix" "[" Int "]" [macro] + | "#End.bag" "[" Int "]" [macro] + | "#End.out" "[" Int "][" Int "]" [macro] + // ------------------------------------------------------ + rule #End.wards[A] => #hashedLocation("Solidity", 0, A) + rule #End.vat => 1 + rule #End.cat => 2 + rule #End.vow => 3 + rule #End.pot => 4 + rule #End.spot => 5 + rule #End.live => 6 + rule #End.when => 7 + rule #End.wait => 8 + rule #End.debt => 9 + rule #End.tag[ILK] => #hashedLocation("Solidity", 10, ILK) + rule #End.gap[ILK] => #hashedLocation("Solidity", 11, ILK) + rule #End.Art[ILK] => #hashedLocation("Solidity", 12, ILK) + rule #End.fix[ILK] => #hashedLocation("Solidity", 13, ILK) + rule #End.bag[USR] => #hashedLocation("Solidity", 14, USR) + rule #End.out[ILK][USR] => #hashedLocation("Solidity", 15, ILK USR) + + // ### Pot + // ------- + + syntax Int ::= "#Pot.wards" "[" Int "]" [macro] + | "#Pot.pie" "[" Int "]" [macro] + | "#Pot.Pie" [macro] + | "#Pot.dsr" [macro] + | "#Pot.chi" [macro] + | "#Pot.vat" [macro] + | "#Pot.vow" [macro] + | "#Pot.rho" [macro] + | "#Pot.live" [macro] + // ----------------------------------------------- + rule #Pot.wards[A] => #hashedLocation("Solidity", 0, A) + rule #Pot.pie[USR] => #hashedLocation("Solidity", 1, USR) + rule #Pot.Pie => 2 + rule #Pot.dsr => 3 + rule #Pot.chi => 4 + rule #Pot.vat => 5 + rule #Pot.vow => 6 + rule #Pot.rho => 7 + rule #Pot.live => 8 + + // ### DSToken + // ----------- + + syntax Int ::= "#DSToken.supply" [macro] + | "#DSToken.balances" "[" Int "]" [macro] + | "#DSToken.allowance" "[" Int "][" Int "]" [macro] + | "#DSToken.authority" [macro] + | "#DSToken.owner_stopped" [macro] + | "#DSToken.symbol" [macro] + | "#DSToken.decimals" [macro] + // ---------------------------------------------------------------- + rule #DSToken.supply => 0 + rule #DSToken.balances[A] => #hashedLocation("Solidity", 1, A) + rule #DSToken.allowance[A][B] => #hashedLocation("Solidity", 2, A B) + rule #DSToken.authority => 3 + rule #DSToken.owner_stopped => 4 + rule #DSToken.symbol => 5 + rule #DSToken.decimals => 6 + + // ### DSValue + // ----------- + + syntax Int ::= "#DSValue.authority" [macro] + | "#DSValue.owner_has" [macro] + | "#DSValue.val" [macro] + // ------------------------------------------- + rule #DSValue.authority => 0 + rule #DSValue.owner_has => 1 + rule #DSValue.val => 2 + + // ### Spotter + // ----------- + + syntax Int ::= "#Spotter.wards" "[" Int "]" [macro] + | "#Spotter.ilks" "[" Int "].pip" [macro] + | "#Spotter.ilks" "[" Int "].mat" [macro] + | "#Spotter.vat" [macro] + | "#Spotter.par" [macro] + | "#Spotter.live" [macro] + // ------------------------------------------------------ + rule #Spotter.wards[A] => #hashedLocation("Solidity", 0, A) + rule #Spotter.ilks[ILK].pip => #hashedLocation("Solidity", 1, ILK) +Int 0 + rule #Spotter.ilks[ILK].mat => #hashedLocation("Solidity", 1, ILK) +Int 1 + rule #Spotter.vat => 2 + rule #Spotter.par => 3 + rule #Spotter.live => 4 + +endmodule diff --git a/tests/specs/mcd-structured/vat-addui-fail-rough-spec.k b/tests/specs/mcd-structured/vat-addui-fail-rough-spec.k new file mode 100644 index 0000000000..8518a6f30a --- /dev/null +++ b/tests/specs/mcd-structured/vat-addui-fail-rough-spec.k @@ -0,0 +1,112 @@ +requires "verification.k" + +module VAT-ADDUI-FAIL-ROUGH-SPEC + imports VERIFICATION + + // Vat_addui + claim [Vat.addui.fail.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => ?_ + _ => ?FAILURE:EndStatusCode + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + chop(ABI_y) : ABI_x : JMPTO : WS => ?_ + _ + 13112 => ?_ + #gas(VGas) => ?_ + VMemoryUsed + _ => ?_ + _ + VCallDepth => ?_ + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE + _ACCT_ID_ORIG_STORAGE + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeSInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 1015) + andBool (#rangeUInt(256, VMemoryUsed))))) + + + andBool notBool ( + ((#rangeUInt(256, ABI_x:Int +Int ABI_y:Int))) + ) + ensures + ?FAILURE =/=K EVMC_SUCCESS + +endmodule diff --git a/tests/specs/mcd-structured/vat-arithmetic-spec.k b/tests/specs/mcd-structured/vat-arithmetic-spec.k new file mode 100644 index 0000000000..c512ab49de --- /dev/null +++ b/tests/specs/mcd-structured/vat-arithmetic-spec.k @@ -0,0 +1,589 @@ +requires "verification.k" + +module VAT-ARITHMETIC-SPEC + imports VERIFICATION + + claim [Vat.adduu.pass]: + #execute ~> CONTINUATION => JUMP JMPTO ~> #pc [ JUMP ] ~> #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => ABI_x +Int ABI_y : WS + _ + 13086 => 13111 + #gas(VGas) => #gas ( ( VGas +Int -62 ) ) + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + ... + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) + + claim [Vat.addui.pass]: + #execute ~> CONTINUATION => JUMP JMPTO ~> #pc [ JUMP ] ~> #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + chop(ABI_y) : ABI_x : JMPTO : WS => ABI_x +Int ABI_y : WS + _ + 13112 => 13174 + #gas(VGas) => #if ( ABI_y + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + ... + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeSInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 1015) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) + + claim [Vat.subuu.pass]: + #execute ~> CONTINUATION => JUMP JMPTO ~> #pc [ JUMP ] ~> #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => ABI_x -Int ABI_y : WS + _ + 13060 => 13085 + #gas(VGas) => #gas ( ( VGas +Int -62 ) ) + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + ... + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x -Int ABI_y))))))) + + claim [Vat.subui.pass]: + #execute ~> CONTINUATION => JUMP JMPTO ~> #pc [ JUMP ] ~> #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + chop(ABI_y) : ABI_x : JMPTO : WS => ABI_x -Int ABI_y : WS + _ + 13304 => 13366 + #gas(VGas) => #if ( ABI_y =/=Int 0 andBool 0 <=Int ABI_y ) + #then #gas ( ( VGas +Int -136 ) ) + #else #if 0 <=Int ABI_y + #then #gas ( ( VGas +Int -122 ) ) + #else #gas ( ( VGas +Int -136 ) ) + #fi + #fi + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + ... + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeSInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 1015) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x -Int ABI_y))))))) + + claim [Vat.muluu.pass]: + #execute ~> CONTINUATION => JUMP JMPTO ~> #pc [ JUMP ] ~> #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => ABI_x *Int ABI_y : WS + _ + 13234 => 13277 + #gas(VGas) => #if ABI_y ==Int 0 + #then #gas ( ( VGas +Int -62 ) ) + #else #gas ( ( VGas +Int -114 ) ) + #fi + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + ... + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 1000) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x *Int ABI_y))))))) + + claim [Vat.mului.pass]: + #execute ~> CONTINUATION => JUMP JMPTO ~> #pc [ JUMP ] ~> #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + chop(ABI_y) : ABI_x : JMPTO : WS => chop(ABI_x *Int ABI_y) : WS + _ + 13175 => 13233 + #gas(VGas) => #if ABI_y ==Int 0 + #then #gas ( ( VGas +Int -104 ) ) + #else #gas ( ( VGas +Int -140 ) ) + #fi + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + ... + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeSInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 1000) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeSInt(256, ABI_x)) + andBool ((#rangeSInt(256, ABI_x *Int ABI_y)))))))) + +endmodule diff --git a/tests/specs/mcd-structured/vat-dai-pass-spec.k b/tests/specs/mcd-structured/vat-dai-pass-spec.k new file mode 100644 index 0000000000..34b1de0695 --- /dev/null +++ b/tests/specs/mcd-structured/vat-dai-pass-spec.k @@ -0,0 +1,107 @@ +requires "verification.k" + +module VAT-DAI-PASS-SPEC + imports VERIFICATION + + claim [Vat.dai.pass]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => #buf(32, Rad) + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("dai", #address(ABI_usr)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => #gas ( ( VGas +Int -1236 ) ) + 0 => ?_ + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.dai[ABI_usr] |-> Rad) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeAddress(ABI_usr) + andBool (#rangeUInt(256, Rad) + andBool (lengthBytes(CD) <=Int 1250000000 + andBool ((VCallValue ==Int 0))))) + +endmodule diff --git a/tests/specs/mcd-structured/vat-deny-diff-fail-rough-spec.k b/tests/specs/mcd-structured/vat-deny-diff-fail-rough-spec.k new file mode 100644 index 0000000000..7fc2d7d793 --- /dev/null +++ b/tests/specs/mcd-structured/vat-deny-diff-fail-rough-spec.k @@ -0,0 +1,120 @@ +requires "verification.k" + +module VAT-DENY-DIFF-FAIL-ROUGH-SPEC + imports VERIFICATION + + // Vat_deny-diff + claim [Vat.deny-diff.fail.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => ?_ + _ => ?FAILURE:EndStatusCode + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("deny", #address(ABI_usr)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth => ?_ + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.wards[CALLER_ID] |-> May) + (#Vat.wards[ABI_usr] |-> Junk_0) + (#Vat.live |-> Live) + ACCT_ID_STORAGE => + ?_ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeAddress(ABI_usr) + andBool (#rangeUInt(256, May) + andBool (#rangeUInt(256, Live) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((CALLER_ID =/=Int ABI_usr)))))) + + andBool notBool ( + ((May:Int ==Int 1) + andBool ((Live:Int ==Int 1) + andBool ((VCallValue:Int ==Int 0)))) + ) + ensures + ?FAILURE =/=K EVMC_SUCCESS + +endmodule diff --git a/tests/specs/mcd-structured/vat-flux-diff-pass-rough-spec.k b/tests/specs/mcd-structured/vat-flux-diff-pass-rough-spec.k new file mode 100644 index 0000000000..9d01b2ffcd --- /dev/null +++ b/tests/specs/mcd-structured/vat-flux-diff-pass-rough-spec.k @@ -0,0 +1,125 @@ +requires "verification.k" +requires "vat-arithmetic-spec.k" + +module VAT-FLUX-DIFF-PASS-ROUGH-SPEC + imports VERIFICATION + imports VAT-ARITHMETIC-SPEC + + claim [Vat.flux-diff.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("flux", #bytes32(ABI_ilk), #address(ABI_src), #address(ABI_dst), #uint256(ABI_wad)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.can[ABI_src][CALLER_ID] |-> May) + (#Vat.gem[ABI_ilk][ABI_src] |-> Gem_src) + (#Vat.gem[ABI_ilk][ABI_dst] |-> Gem_dst) + ACCT_ID_STORAGE => + (#Vat.can[ABI_src][CALLER_ID] |-> May) + (#Vat.gem[ABI_ilk][ABI_src] |-> Gem_src -Int ABI_wad) + (#Vat.gem[ABI_ilk][ABI_dst] |-> Gem_dst +Int ABI_wad) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + _Nonce_Vat => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeBytes(32, ABI_ilk) + andBool (#rangeAddress(ABI_src) + andBool (#rangeAddress(ABI_dst) + andBool (#rangeUInt(256, ABI_wad) + andBool (#rangeUInt(256, May) + andBool (#rangeUInt(256, Gem_src) + andBool (#rangeUInt(256, Gem_dst) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((ABI_src =/=Int ABI_dst) + andBool ((((May ==Int 1 orBool ABI_src ==Int CALLER_ID))) + andBool (((VCallValue ==Int 0)) + andBool ((#rangeUInt(256, Gem_src -Int ABI_wad)) + andBool ((#rangeUInt(256, Gem_dst +Int ABI_wad))))))))))))))) + + [depends(VAT-ARITHMETIC-SPEC.Vat.subuu.pass,VAT-ARITHMETIC-SPEC.Vat.adduu.pass)] + +endmodule diff --git a/tests/specs/mcd-structured/vat-flux-diff-pass-spec.k b/tests/specs/mcd-structured/vat-flux-diff-pass-spec.k new file mode 100644 index 0000000000..b2e17ceeda --- /dev/null +++ b/tests/specs/mcd-structured/vat-flux-diff-pass-spec.k @@ -0,0 +1,132 @@ +requires "vat-arithmetic-spec.k" + +module VAT-FLUX-DIFF-PASS-SPEC + imports VAT-ARITHMETIC-SPEC + + claim [Vat.flux-diff.pass]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("flux", #bytes32(ABI_ilk), #address(ABI_src), #address(ABI_dst), #uint256(ABI_wad)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => #gas ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Gem_src -Int ABI_wad ) , Gem_src , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Gem_dst +Int ABI_wad ) , Gem_dst , Junk_2 ) ) +Int -8307 ) ) + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.can[ABI_src][CALLER_ID] |-> May) + (#Vat.gem[ABI_ilk][ABI_src] |-> Gem_src) + (#Vat.gem[ABI_ilk][ABI_dst] |-> Gem_dst) + ACCT_ID_STORAGE => + (#Vat.can[ABI_src][CALLER_ID] |-> May) + (#Vat.gem[ABI_ilk][ABI_src] |-> Gem_src -Int ABI_wad) + (#Vat.gem[ABI_ilk][ABI_dst] |-> Gem_dst +Int ABI_wad) + ACCT_ID_STORAGE + + + (#Vat.can[ABI_src][CALLER_ID] |-> Junk_0) + (#Vat.gem[ABI_ilk][ABI_src] |-> Junk_1) + (#Vat.gem[ABI_ilk][ABI_dst] |-> Junk_2) + ACCT_ID_ORIG_STORAGE + + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeBytes(32, ABI_ilk) + andBool (#rangeAddress(ABI_src) + andBool (#rangeAddress(ABI_dst) + andBool (#rangeUInt(256, ABI_wad) + andBool (#rangeUInt(256, May) + andBool (#rangeUInt(256, Gem_src) + andBool (#rangeUInt(256, Gem_dst) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((ABI_src =/=Int ABI_dst) + andBool (#rangeUInt(256, Junk_0) + andBool (#rangeUInt(256, Junk_1) + andBool (#rangeUInt(256, Junk_2) + andBool ((((May ==Int 1 orBool ABI_src ==Int CALLER_ID))) + andBool (((VCallValue ==Int 0)) + andBool ((#rangeUInt(256, Gem_src -Int ABI_wad)) + andBool ((#rangeUInt(256, Gem_dst +Int ABI_wad)))))))))))))))))) + + [depends(VAT-ARITHMETIC-SPEC.Vat.adduu.pass,VAT-ARITHMETIC-SPEC.Vat.subuu.pass)] + +endmodule diff --git a/tests/specs/mcd-structured/vat-fold-pass-rough-spec.k b/tests/specs/mcd-structured/vat-fold-pass-rough-spec.k new file mode 100644 index 0000000000..ddea64ba1e --- /dev/null +++ b/tests/specs/mcd-structured/vat-fold-pass-rough-spec.k @@ -0,0 +1,142 @@ +requires "verification.k" +requires "vat-arithmetic-spec.k" + +module VAT-FOLD-PASS-ROUGH-SPEC + imports VERIFICATION + imports VAT-ARITHMETIC-SPEC + + // Vat_fold + claim [Vat.fold.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("fold", #bytes32(ABI_i), #address(ABI_u), #int256(ABI_rate)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.wards[CALLER_ID] |-> May) + (#Vat.ilks[ABI_i].Art |-> Art_i) + (#Vat.live |-> Live) + (#Vat.ilks[ABI_i].rate |-> Rate_i) + (#Vat.dai[ABI_u] |-> Dai_u) + (#Vat.debt |-> Debt) + ACCT_ID_STORAGE => + (#Vat.wards[CALLER_ID] |-> May) + (#Vat.ilks[ABI_i].Art |-> Art_i) + (#Vat.live |-> Live) + (#Vat.ilks[ABI_i].rate |-> Rate_i +Int ABI_rate) + (#Vat.dai[ABI_u] |-> Dai_u +Int Art_i *Int ABI_rate) + (#Vat.debt |-> Debt +Int Art_i *Int ABI_rate) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + _Nonce_Vat => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeBytes(32, ABI_i) + andBool (#rangeAddress(ABI_u) + andBool (#rangeSInt(256, ABI_rate) + andBool (#rangeUInt(256, May) + andBool (#rangeUInt(256, Rate_i) + andBool (#rangeUInt(256, Dai_u) + andBool (#rangeUInt(256, Art_i) + andBool (#rangeUInt(256, Debt) + andBool (lengthBytes(CD) <=Int 1250000000 + andBool (#rangeUInt(256, Junk_0) + andBool (#rangeUInt(256, Junk_1) + andBool (#rangeUInt(256, Junk_2) + andBool (#rangeUInt(256, Junk_3) + andBool (#rangeUInt(256, Junk_4) + andBool (#rangeUInt(256, Junk_5) + andBool ((((VCallValue ==Int 0))) + andBool ((((May ==Int 1))) + andBool ((((Live ==Int 1))) + andBool ((((Art_i <=Int maxSInt256))) + andBool (((#rangeSInt(256, Art_i *Int ABI_rate))) + andBool ((#rangeUInt(256, Rate_i +Int ABI_rate)) + andBool ((#rangeUInt(256, Dai_u +Int (Art_i *Int ABI_rate))) + andBool ((#rangeUInt(256, Debt +Int (Art_i *Int ABI_rate)))))))))))))))))))))))))) + + [depends(VAT-ARITHMETIC-SPEC.Vat.addui.pass,VAT-ARITHMETIC-SPEC.Vat.mului.pass)] + +endmodule diff --git a/tests/specs/mcd-structured/vat-fork-diff-pass-rough-spec.k b/tests/specs/mcd-structured/vat-fork-diff-pass-rough-spec.k new file mode 100644 index 0000000000..456f2a2a5b --- /dev/null +++ b/tests/specs/mcd-structured/vat-fork-diff-pass-rough-spec.k @@ -0,0 +1,154 @@ +requires "verification.k" +requires "vat-arithmetic-spec.k" + +module VAT-FORK-DIFF-PASS-ROUGH-SPEC + imports VERIFICATION + imports VAT-ARITHMETIC-SPEC + + // Vat_fork-diff + claim [Vat.fork-diff.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("fork", #bytes32(ABI_ilk), #address(ABI_src), #address(ABI_dst), #int256(ABI_dink), #int256(ABI_dart)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.can[ABI_src][CALLER_ID] |-> Can_src) + (#Vat.can[ABI_dst][CALLER_ID] |-> Can_dst) + (#Vat.ilks[ABI_ilk].rate |-> Rate) + (#Vat.ilks[ABI_ilk].spot |-> Spot) + (#Vat.ilks[ABI_ilk].dust |-> Dust) + (#Vat.urns[ABI_ilk][ABI_src].ink |-> Ink_u) + (#Vat.urns[ABI_ilk][ABI_src].art |-> Art_u) + (#Vat.urns[ABI_ilk][ABI_dst].ink |-> Ink_v) + (#Vat.urns[ABI_ilk][ABI_dst].art |-> Art_v) + ACCT_ID_STORAGE => + (#Vat.can[ABI_src][CALLER_ID] |-> Can_src) + (#Vat.can[ABI_dst][CALLER_ID] |-> Can_dst) + (#Vat.ilks[ABI_ilk].rate |-> Rate) + (#Vat.ilks[ABI_ilk].spot |-> Spot) + (#Vat.ilks[ABI_ilk].dust |-> Dust) + (#Vat.urns[ABI_ilk][ABI_src].ink |-> Ink_u -Int ABI_dink) + (#Vat.urns[ABI_ilk][ABI_src].art |-> Art_u -Int ABI_dart) + (#Vat.urns[ABI_ilk][ABI_dst].ink |-> Ink_v +Int ABI_dink) + (#Vat.urns[ABI_ilk][ABI_dst].art |-> Art_v +Int ABI_dart) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + _Nonce_Vat => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeBytes(32, ABI_ilk) + andBool (#rangeAddress(ABI_src) + andBool (#rangeAddress(ABI_dst) + andBool (#rangeSInt(256, ABI_dink) + andBool (#rangeSInt(256, ABI_dart) + andBool (#rangeUInt(256, Can_src) + andBool (#rangeUInt(256, Can_dst) + andBool (#rangeUInt(256, Rate) + andBool (#rangeUInt(256, Spot) + andBool (#rangeUInt(256, Dust) + andBool (#rangeUInt(256, Ink_u) + andBool (#rangeUInt(256, Art_u) + andBool (#rangeUInt(256, Ink_v) + andBool (#rangeUInt(256, Art_v) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((ABI_src =/=Int ABI_dst) + andBool (((VCallValue ==Int 0)) + andBool ((((ABI_src ==Int CALLER_ID) orBool (Can_src ==Int 1))) + andBool ((((ABI_dst ==Int CALLER_ID) orBool (Can_dst ==Int 1))) + andBool ((((Art_u -Int ABI_dart) *Int Rate <=Int (Ink_u -Int ABI_dink) *Int Spot)) + andBool ((((Art_v +Int ABI_dart) *Int Rate <=Int (Ink_v +Int ABI_dink) *Int Spot)) + andBool (((((Art_u -Int ABI_dart) *Int Rate >=Int Dust) orBool (Art_u -Int ABI_dart ==Int 0))) + andBool (((((Art_v +Int ABI_dart) *Int Rate >=Int Dust) orBool (Art_v +Int ABI_dart ==Int 0))) + andBool ((#rangeUInt(256, Ink_u -Int ABI_dink)) + andBool ((#rangeUInt(256, Ink_v +Int ABI_dink)) + andBool ((#rangeUInt(256, Art_u -Int ABI_dart)) + andBool ((#rangeUInt(256, Art_v +Int ABI_dart)) + andBool ((#rangeUInt(256, (Ink_u -Int ABI_dink) *Int Spot)) + andBool ((#rangeUInt(256, (Ink_v +Int ABI_dink) *Int Spot))))))))))))))))))))))))))))))) + + [depends(VAT-ARITHMETIC-SPEC.Vat.addui.pass,VAT-ARITHMETIC-SPEC.Vat.subui.pass,VAT-ARITHMETIC-SPEC.Vat.muluu.pass)] + +endmodule diff --git a/tests/specs/mcd-structured/vat-frob-diff-zero-dart-pass-rough-spec.k b/tests/specs/mcd-structured/vat-frob-diff-zero-dart-pass-rough-spec.k new file mode 100644 index 0000000000..757a9dc224 --- /dev/null +++ b/tests/specs/mcd-structured/vat-frob-diff-zero-dart-pass-rough-spec.k @@ -0,0 +1,156 @@ +requires "verification.k" +requires "vat-arithmetic-spec.k" + +module VAT-FROB-DIFF-ZERO-DART-PASS-ROUGH-SPEC + imports VERIFICATION + imports VAT-ARITHMETIC-SPEC + + // Vat_frob-diff-zero-dart + claim [Vat.frob-diff-zero-dart.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("frob", #bytes32(ABI_i), #address(ABI_u), #address(ABI_v), #address(ABI_w), #int256(ABI_dink), #int256(ABI_dart)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.gem[ABI_i][ABI_v] |-> Gem_iv) + (#Vat.urns[ABI_i][ABI_u].ink |-> Urn_ink) + ACCT_ID_STORAGE => + (#Vat.gem[ABI_i][ABI_v] |-> Gem_iv -Int ABI_dink) + (#Vat.urns[ABI_i][ABI_u].ink |-> Urn_ink +Int ABI_dink) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + _Nonce_Vat => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeBytes(32, ABI_i) + andBool (#rangeAddress(ABI_u) + andBool (#rangeAddress(ABI_v) + andBool (#rangeAddress(ABI_w) + andBool (#rangeSInt(256, ABI_dink) + andBool (#rangeSInt(256, ABI_dart) + andBool (#rangeUInt(256, Ilk_rate) + andBool (#rangeUInt(256, Ilk_spot) + andBool (#rangeUInt(256, Ilk_dust) + andBool (#rangeUInt(256, Ilk_Art) + andBool (#rangeUInt(256, Urn_ink) + andBool (#rangeUInt(256, Urn_art) + andBool (#rangeUInt(256, Gem_iv) + andBool (#rangeUInt(256, Can_u) + andBool (#rangeUInt(256, Can_v) + andBool (#rangeUInt(256, Live) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((ABI_u =/=Int ABI_v) + andBool ((ABI_v =/=Int ABI_w) + andBool ((ABI_u =/=Int ABI_w) + andBool ((ABI_dink =/=Int 0) + andBool ((ABI_dart ==Int 0) + andBool ((((#rangeUInt(256, Urn_ink +Int ABI_dink)))) + andBool ((((#rangeUInt(256, Gem_iv -Int ABI_dink)))) + andBool ((((#rangeUInt(256, (Urn_ink +Int ABI_dink) *Int Ilk_spot)))) + andBool ((((#rangeUInt(256, Urn_art *Int Ilk_rate)))) + andBool ((((#rangeUInt(256, Ilk_Art *Int Ilk_rate)))) + andBool (((#rangeSInt(256, Ilk_rate))) + andBool ((VCallValue ==Int 0) + andBool ((Live ==Int 1) + andBool ((Ilk_rate =/=Int 0) + andBool (((ABI_dink >=Int 0) orBool (((Urn_art *Int Ilk_rate) <=Int ((Urn_ink +Int ABI_dink) *Int Ilk_spot)))) + andBool (((ABI_dink >=Int 0) orBool (ABI_u ==Int CALLER_ID orBool Can_u ==Int 1)) + andBool (((ABI_dink <=Int 0) orBool (ABI_v ==Int CALLER_ID orBool Can_v ==Int 1)) + andBool (((Urn_art ==Int 0) orBool ((Urn_art *Int Ilk_rate) >=Int Ilk_dust))))))))))))))))))))))))))))))))))))) + + // TODO: These are to be brought back into the structure once booster unification improves + andBool #lookup(ACCT_ID_STORAGE, #Vat.ilks[ABI_i].rate) ==Int Ilk_rate + andBool #lookup(ACCT_ID_STORAGE, #Vat.ilks[ABI_i].spot) ==Int Ilk_spot + andBool #lookup(ACCT_ID_STORAGE, #Vat.ilks[ABI_i].dust) ==Int Ilk_dust + andBool #lookup(ACCT_ID_STORAGE, #Vat.can[ABI_u][CALLER_ID]) ==Int Can_u + andBool #lookup(ACCT_ID_STORAGE, #Vat.can[ABI_v][CALLER_ID]) ==Int Can_v + andBool #lookup(ACCT_ID_STORAGE, #Vat.urns[ABI_i][ABI_u].art) ==Int Urn_art + andBool #lookup(ACCT_ID_STORAGE, #Vat.ilks[ABI_i].Art) ==Int Ilk_Art + andBool #lookup(ACCT_ID_STORAGE, #Vat.live) ==Int Live + + [depends(VAT-ARITHMETIC-SPEC.Vat.addui.pass,VAT-ARITHMETIC-SPEC.Vat.subui.pass,VAT-ARITHMETIC-SPEC.Vat.mului.pass,VAT-ARITHMETIC-SPEC.Vat.muluu.pass)] + +endmodule diff --git a/tests/specs/mcd-structured/vat-heal-pass-spec.k b/tests/specs/mcd-structured/vat-heal-pass-spec.k new file mode 100644 index 0000000000..dcfd42bea4 --- /dev/null +++ b/tests/specs/mcd-structured/vat-heal-pass-spec.k @@ -0,0 +1,132 @@ +requires "verification.k" + +module VAT-HEAL-PASS-SPEC + imports VERIFICATION + + claim [Vat.heal.pass]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("heal", #uint256(ABI_rad)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => #gas ( ( ( ( ( ( VGas -Int Csstore( ISTANBUL , ( Sin -Int ABI_rad ) , Sin , Junk_0 ) ) -Int Csstore( ISTANBUL , ( Dai -Int ABI_rad ) , Dai , Junk_1 ) ) -Int Csstore( ISTANBUL , ( Vice -Int ABI_rad ) , Vice , Junk_2 ) ) -Int Csstore( ISTANBUL , ( Debt -Int ABI_rad ) , Debt , Junk_3 ) ) +Int -8616 ) ) + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.sin[CALLER_ID] |-> Sin) + (#Vat.dai[CALLER_ID] |-> Dai) + (#Vat.vice |-> Vice) + (#Vat.debt |-> Debt) + ACCT_ID_STORAGE => + (#Vat.sin[CALLER_ID] |-> Sin -Int ABI_rad) + (#Vat.dai[CALLER_ID] |-> Dai -Int ABI_rad) + (#Vat.vice |-> Vice -Int ABI_rad) + (#Vat.debt |-> Debt -Int ABI_rad) + ACCT_ID_STORAGE + + + (#Vat.sin[CALLER_ID] |-> Junk_0) + (#Vat.dai[CALLER_ID] |-> Junk_1) + (#Vat.vice |-> Junk_2) + (#Vat.debt |-> Junk_3) + ACCT_ID_ORIG_STORAGE + + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeUInt(256, ABI_rad) + andBool (#rangeUInt(256, Dai) + andBool (#rangeUInt(256, Sin) + andBool (#rangeUInt(256, Debt) + andBool (#rangeUInt(256, Vice) + andBool (lengthBytes(CD) <=Int 1250000000 + andBool (#rangeUInt(256, Junk_0) + andBool (#rangeUInt(256, Junk_1) + andBool (#rangeUInt(256, Junk_2) + andBool (#rangeUInt(256, Junk_3) + andBool (((VCallValue ==Int 0)) + andBool ((#rangeUInt(256, Dai -Int ABI_rad)) + andBool ((#rangeUInt(256, Sin -Int ABI_rad)) + andBool ((#rangeUInt(256, Debt -Int ABI_rad)) + andBool ((#rangeUInt(256, Vice -Int ABI_rad))))))))))))))))) + +endmodule diff --git a/tests/specs/mcd-structured/vat-move-diff-rough-spec.k b/tests/specs/mcd-structured/vat-move-diff-rough-spec.k new file mode 100644 index 0000000000..486148a657 --- /dev/null +++ b/tests/specs/mcd-structured/vat-move-diff-rough-spec.k @@ -0,0 +1,127 @@ +requires "verification.k" +requires "vat-arithmetic-spec.k" + + +module VAT-MOVE-DIFF-ROUGH-SPEC + imports VERIFICATION + imports VAT-ARITHMETIC-SPEC + + // Vat_move-diff + claim [Vat.move-diff.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("move", #address(ABI_src), #address(ABI_dst), #uint256(ABI_rad)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.can[ABI_src][CALLER_ID] |-> May) + (#Vat.dai[ABI_src] |-> Dai_src) + (#Vat.dai[ABI_dst] |-> Dai_dst) + ACCT_ID_STORAGE => + (#Vat.can[ABI_src][CALLER_ID] |-> May) + (#Vat.dai[ABI_src] |-> Dai_src -Int ABI_rad) + (#Vat.dai[ABI_dst] |-> Dai_dst +Int ABI_rad) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeAddress(ABI_src) + andBool (#rangeAddress(ABI_dst) + andBool (#rangeUInt(256, ABI_rad) + andBool (#rangeUInt(256, Dai_dst) + andBool (#rangeUInt(256, Dai_src) + andBool (#rangeUInt(256, May) + andBool ((lengthBytes(CD) <=Int 1250000000) + andBool ((ABI_src =/=Int ABI_dst) + andBool ((((May ==Int 1 orBool ABI_src ==Int CALLER_ID))) + andBool (((VCallValue ==Int 0)) + andBool ((#rangeUInt(256, Dai_src -Int ABI_rad)) + andBool ((#rangeUInt(256, Dai_dst +Int ABI_rad)))))))))))))) + + [depends(VAT-ARITHMETIC-SPEC.Vat.adduu.pass,VAT-ARITHMETIC-SPEC.Vat.subuu.pass)] + +endmodule diff --git a/tests/specs/mcd-structured/vat-sin-pass-spec.k b/tests/specs/mcd-structured/vat-sin-pass-spec.k new file mode 100644 index 0000000000..a27897f918 --- /dev/null +++ b/tests/specs/mcd-structured/vat-sin-pass-spec.k @@ -0,0 +1,107 @@ +requires "verification.k" + +module VAT-SIN-PASS-SPEC + imports VERIFICATION + + claim [Vat.sin.pass]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => #buf(32, Rad) + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("sin", #address(ABI_usr)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => #gas ( ( VGas +Int -1235 ) ) + 0 => ?_ + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.sin[ABI_usr] |-> Rad) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vat) + + andBool (#rangeAddress(ABI_usr) + andBool (#rangeUInt(256, Rad) + andBool (lengthBytes(CD) <=Int 1250000000 + andBool ((VCallValue ==Int 0))))) + +endmodule diff --git a/tests/specs/mcd-structured/vat-slip-pass-rough-spec.k b/tests/specs/mcd-structured/vat-slip-pass-rough-spec.k new file mode 100644 index 0000000000..27bef7bf1d --- /dev/null +++ b/tests/specs/mcd-structured/vat-slip-pass-rough-spec.k @@ -0,0 +1,122 @@ +requires "verification.k" +requires "vat-arithmetic-spec.k" + +module VAT-SLIP-PASS-ROUGH-SPEC + imports VERIFICATION + imports VAT-ARITHMETIC-SPEC + + // Vat_slip + claim [Vat.slip.pass.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + .Bytes + _ => EVMC_SUCCESS + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("slip", #bytes32(ABI_ilk), #address(ABI_usr), #int256(ABI_wad)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + + (#Vat.wards[CALLER_ID] |-> May) + (#Vat.gem[ABI_ilk][ABI_usr] |-> Gem) + ACCT_ID_STORAGE => + (#Vat.wards[CALLER_ID] |-> May) + (#Vat.gem[ABI_ilk][ABI_usr] |-> Gem +Int ABI_wad) + ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + _Nonce_Vat => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeBytes(32, ABI_ilk) + andBool (#rangeAddress(ABI_usr) + andBool (#rangeSInt(256, ABI_wad) + andBool (#rangeUInt(256, May) + andBool (#rangeUInt(256, Gem) + andBool (lengthBytes(CD) <=Int 1250000000 + andBool (#rangeUInt(256, Junk_0) + andBool (#rangeUInt(256, Junk_1) + andBool (((May ==Int 1)) + andBool (((VCallValue ==Int 0)) + andBool ((#rangeUInt(256, Gem +Int ABI_wad))))))))))))) + + [depends(VAT-ARITHMETIC-SPEC.Vat.addui.pass)] + +endmodule diff --git a/tests/specs/mcd-structured/vat-spec.k b/tests/specs/mcd-structured/vat-spec.k new file mode 100644 index 0000000000..a96c5f1de3 --- /dev/null +++ b/tests/specs/mcd-structured/vat-spec.k @@ -0,0 +1,33 @@ +requires "vat-addui-fail-rough-spec.k" +requires "vat-arithmetic-spec.k" +requires "vat-dai-pass-spec.k" +requires "vat-deny-diff-fail-rough-spec.k" +requires "vat-flux-diff-pass-rough-spec.k" +requires "vat-flux-diff-pass-spec.k" +requires "vat-fold-pass-rough-spec.k" +requires "vat-fork-diff-pass-rough-spec.k" +requires "vat-frob-diff-zero-dart-pass-rough-spec.k" +requires "vat-heal-pass-spec.k" +requires "vat-move-diff-rough-spec.k" +requires "vat-sin-pass-spec.k" +requires "vat-slip-pass-rough-spec.k" +requires "vat-subui-fail-rough-spec.k" + +module VAT-SPEC + + imports VAT-ADDUI-FAIL-ROUGH-SPEC + imports VAT-ARITHMETIC-SPEC + imports VAT-DAI-PASS-SPEC + imports VAT-DENY-DIFF-FAIL-ROUGH-SPEC + imports VAT-FLUX-DIFF-PASS-ROUGH-SPEC + imports VAT-FLUX-DIFF-PASS-SPEC + imports VAT-FOLD-PASS-ROUGH-SPEC + imports VAT-FORK-DIFF-PASS-ROUGH-SPEC + imports VAT-FROB-DIFF-ZERO-DART-PASS-ROUGH-SPEC + imports VAT-HEAL-PASS-SPEC + imports VAT-MOVE-DIFF-ROUGH-SPEC + imports VAT-SIN-PASS-SPEC + imports VAT-SLIP-PASS-ROUGH-SPEC + imports VAT-SUBUI-FAIL-ROUGH-SPEC + +endmodule diff --git a/tests/specs/mcd-structured/vat-subui-fail-rough-spec.k b/tests/specs/mcd-structured/vat-subui-fail-rough-spec.k new file mode 100644 index 0000000000..9fd6f9827b --- /dev/null +++ b/tests/specs/mcd-structured/vat-subui-fail-rough-spec.k @@ -0,0 +1,112 @@ +requires "verification.k" + +module VAT-SUBUI-FAIL-ROUGH-SPEC + imports VERIFICATION + + // Vat_subui + claim [Vat.subui.fail.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => ?_ + _ => ?FAILURE:EndStatusCode + _VCallStack + _ + _ => ?_ + + Vat_bin_runtime + #computeValidJumpDests(Vat_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + chop(ABI_y) : ABI_x : JMPTO : WS => ?_ + _ + 13304 => ?_ + #gas(VGas) => ?_ + VMemoryUsed + _ => ?_ + _ + VCallDepth => ?_ + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vat_bin_runtime + ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE + _ACCT_ID_ORIG_STORAGE + Nonce_Vat + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeSInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 1015) + andBool (#rangeUInt(256, VMemoryUsed))))) + andBool #rangeNonce(Nonce_Vat) + + + andBool notBool ( + ((#rangeUInt(256, ABI_x:Int -Int ABI_y:Int))) + ) + ensures + ?FAILURE =/=K EVMC_SUCCESS + +endmodule diff --git a/tests/specs/mcd-structured/verification.k b/tests/specs/mcd-structured/verification.k new file mode 100644 index 0000000000..ff5648d977 --- /dev/null +++ b/tests/specs/mcd-structured/verification.k @@ -0,0 +1,406 @@ +requires "lemmas/lemmas.k" +requires "bin_runtime.k" +requires "storage.k" +requires "word-pack.k" + +module VERIFICATION + imports DSS-BIN-RUNTIME + imports DSS-STORAGE + imports LEMMAS-MCD + imports LEMMAS-MCD-SYNTAX +endmodule + +module LEMMAS-MCD-SYNTAX + imports EVM + + // ######################## + // Constants + // ######################## + + syntax Int ::= "#Wad" [macro] + | "#Ray" [macro] + | "#Rad" [macro] + // ----------------------------- + rule #Wad => 1000000000000000000 + rule #Ray => 1000000000000000000000000000 + rule #Rad => 1000000000000000000000000000000000000000000000 + + // ######################## + // Word Reasoning + // ######################## + + syntax Bool ::= #notPrecompileAddress ( Int ) [function] + // -------------------------------------------------------- + rule #notPrecompileAddress ( X ) => 0 ==Int X orBool (10 <=Int X andBool #rangeAddress(X)) + + syntax Int ::= #string2Word ( String ) [function] + // ------------------------------------------------- + rule #string2Word(S) => #asWord(#padRightToWidth(32, String2Bytes(S))) + + // ######################## + // Arithmetic + // ######################## + + syntax Int ::= #rmul ( Int , Int ) [function, smtlib(smt_rmul)] + // --------------------------------------------------------------- + rule #rmul(X, Y) => (X *Int Y) /Int #Ray + +endmodule + +module LEMMAS-MCD [symbolic] + imports LEMMAS + imports LEMMAS-MCD-SYNTAX + imports WORD-PACK + + // ######################## + // Arithmetic + // ######################## + + rule chop(Y) => Y +Int pow256 requires #range( 0 -Int maxUInt256 <= Y < 0 ) [simplification] + + rule sgn(chop(X)) ==Int 1 => 0 <=Int X requires #rangeSInt(256, X) [simplification] + rule sgn(chop(X)) ==Int -1 => X X ==Int 0 requires #rangeSInt(256, X) [simplification] + + rule bool2Word( X:Bool ) |Int bool2Word( Y:Bool ) => bool2Word(X orBool Y) [simplification] + + rule [add-cancel-ml-01]: { A +Int B #Equals A } => { B #Equals 0 } [simplification] + rule [add-cancel-ml-02]: { A +Int B #Equals C +Int B } => { A #Equals C } [simplification] + + // ### vat-subui-fail-rough + // + // Via Z3 4.8.7 + // (declare-const pow256 Int) + // (assert (= pow256 115792089237316195423570985008687907853269984665640564039457584007913129639936)) + // + // ; 2^255 + // (declare-const pow255 Int) + // (assert (= pow255 57896044618658097711785492504343953926634992332820282019728792003956564819968)) + // + // ; chop + // (define-fun chop ((x Int)) Int (mod x pow256)) + // + // ; uint256 + // (define-fun uint256 ((x Int)) Bool (and (>= x 0) (< x pow256))) + // + // ; sint256 + // (define-fun sint256 ((x Int)) Bool (and (>= x (- pow255)) (< x pow255))) + // + // ;;;; proof + // + // (declare-const x Int) + // (declare-const y Int) + // + // (assert (uint256 x)) + // (assert (sint256 y)) + // (assert (<= y 0)) + // (assert (not (uint256 (- x y)))) + // + // (assert (not (= (chop (- x y)) (- x (+ y pow256))))) + // (check-sat) + rule chop ( X -Int Y ) => X -Int (Y +Int pow256) + requires #rangeUInt(256, X) + andBool #rangeSInt(256, Y) + andBool Y <=Int 0 + andBool notBool #rangeUInt(256, X -Int Y) [simplification] + + rule chop(X) ==Int chop(Y) => X ==Int Y requires #rangeSInt(256, X) andBool #rangeSInt(256, Y) [simplification] + rule { chop(X) #Equals chop(Y) } => { X #Equals Y } requires #rangeSInt(256, X) andBool #rangeSInt(256, Y) [simplification] + + // ######################## + // Keccak + // ######################## + + rule 0 <=Int keccak( _ ) => true [simplification, smt-lemma] + rule keccak( _ ) true [simplification, smt-lemma] + + // keccak does not equal a concrete value + rule [keccak-eq-conc-false]: keccak(_A) ==Int _B => false [symbolic(_A), concrete(_B), simplification(30), comm] + rule [keccak-neq-conc-true]: keccak(_A) =/=Int _B => true [symbolic(_A), concrete(_B), simplification(30), comm] + rule [keccak-eq-conc-false-ml-lr]: { keccak(A) #Equals B } => { true #Equals keccak(A) ==Int B } [symbolic(A), concrete(B), simplification] + rule [keccak-eq-conc-false-ml-rl]: { B #Equals keccak(A) } => { true #Equals keccak(A) ==Int B } [symbolic(A), concrete(B), simplification] + + rule [keccak-mappings-overlap-false]: keccak(A) +Int B ==Int keccak(C) => false requires notBool (A ==K C) [symbolic(A, C), concrete(B), simplification, comm] + rule [keccak-mappings-overlap-false-ml]: { keccak(A) +Int B #Equals keccak(C) } => { true #Equals keccak(A) +Int B ==Int keccak(C) } requires notBool (A ==K C) [symbolic(A, C), concrete(B), simplification, comm] + + // keccak is injective + rule [keccak-inj]: keccak(A) ==Int keccak(B) => A ==K B [simplification] + rule [keccak-inj-ml]: { keccak(A) #Equals keccak(B) } => { true #Equals A ==K B } [simplification] + + // chop of negative keccak + rule chop (0 -Int keccak(BA)) => pow256 -Int keccak(BA) + [simplification] + + // keccak cannot equal a number outside of its range + rule { X #Equals keccak (_) } => #Bottom + requires X =Int pow256 + [concrete(X), simplification] + + // keccak cannot land too close to 2 ** 256 + rule keccak(B:Bytes) true requires BOUND >=Int pow256 -Int 32 [simplification, concrete(BOUND)] + + // ######################## + // Word Reasoning + // ######################## + + rule #sizeWordStack(WS, N) => #sizeWordStack(WS, 0) +Int N requires N =/=Int 0 [simplification] + + // ### vat-addui-fail-rough + // + // Proof: + // case sgn(X) ==Int 1 + // X s X bool2Word(false) // #rangeUInt(256, X) + // case sgn(X) ==Int -1 + // X s bool2Word(true) // sgn(X) ==Int -1 andBool sgn(0) ==Int 1 + // + // Via Z3 4.8.7: + // ; 2^256 + // (declare-const pow256 Int) + // (assert (= pow256 115792089237316195423570985008687907853269984665640564039457584007913129639936)) + // + // ; 2^255 + // (declare-const pow255 Int) + // (assert (= pow255 57896044618658097711785492504343953926634992332820282019728792003956564819968)) + // + // ; sgn + // (declare-fun sgn (Int) Int) + // (assert (forall ((x Int)) (=> (and (>= x 0) (< x pow255)) (= (sgn x) 1)))) + // (assert (forall ((x Int)) (=> (and (>= x pow255) (< x pow256)) (= (sgn x) -1)))) + // + // ; s (and (= (sgn x) 1) (= (sgn y) 1)) (= (slt x y) (< x y))))) + // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) 1) (= (sgn y) -1)) (= (slt x y) false)))) + // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) -1) (= (sgn y) 1)) (= (slt x y) true)))) + // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) -1) (= (sgn y) -1)) (= (slt x y) (> x y))))) + // + // ;;;; proof + // + // ; uint256 + // (declare-const x Int) + // (assert (and (>= x 0) (< x pow256))) + // + // (assert (not + // (= (slt x 0) (= (sgn x) -1)) + // )) + // (check-sat) + rule X s bool2Word(sgn(X) ==Int -1) requires #rangeUInt(256, X) [simplification] + + rule X -Word Y <=Int X => #rangeUInt(256, X -Int Y) requires #rangeUInt(256, X) andBool #rangeUInt(256, Y) [simplification] + + // ;(set-option :smt.mbqi true) + // + // ; 2^256 + // (declare-const pow256 Int) + // (assert (= pow256 115792089237316195423570985008687907853269984665640564039457584007913129639936)) + // + // ; 2^255 + // (declare-const pow255 Int) + // (assert (= pow255 57896044618658097711785492504343953926634992332820282019728792003956564819968)) + // + // ; sgn + // (declare-fun sgn (Int) Int) + // (assert (forall ((x Int)) (=> (and (>= x 0) (< x pow255)) (= (sgn x) 1)))) + // (assert (forall ((x Int)) (=> (and (>= x pow255) (< x pow256)) (= (sgn x) -1)))) + // + // ; s (and (= (sgn x) 1) (= (sgn y) 1)) (= (slt x y) (< x y))))) + // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) 1) (= (sgn y) -1)) (= (slt x y) false)))) + // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) -1) (= (sgn y) 1)) (= (slt x y) true)))) + // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) -1) (= (sgn y) -1)) (= (slt x y) (> x y))))) + // + // ; chop + // (define-fun chop ((x Int)) Int (mod x pow256)) + // ;(simplify (chop -1)) + // + // ; /Word + // (define-fun zdiv ((x Int) (y Int)) Int (ite (= y 0) 0 (div x y))) + // + // ; /sWord + // (declare-fun sdiv (Int Int) Int) + // (assert (forall ((x Int) (y Int)) (=> (> (* (sgn x) (sgn y)) 0) (= (sdiv x y) (zdiv (abs x) (abs y)) )))) + // (assert (forall ((x Int) (y Int)) (=> (< (* (sgn x) (sgn y)) 0) (= (sdiv x y) (- (zdiv (abs x) (abs y))))))) + // + // ; uint256 + // (define-fun uint256 ((x Int)) Bool (and (>= x 0) (< x pow256))) + // + // ; sint256 + // (define-fun sint256 ((x Int)) Bool (and (>= x (- pow255)) (< x pow255))) + // + // ;;;; + // + // (declare-const x Int) + // (declare-const y Int) + + // Via Z3 4.7.1: + // (push) + // (assert (not (=> (uint256 x) (= (slt 0 x) (and (= (sgn x) 1) (not (= x 0))) ) ) )) + // (check-sat) + // (pop) + rule 0 s bool2Word(sgn(X) ==Int 1 andBool X =/=Int 0) requires #rangeUInt(256, X) [simplification] + + // Via Z3 4.7.1: + // (push) + // (assert (not (=> true (= (chop (- x (chop y))) (chop (- x y)) ) ) )) + // (check-sat) + // (pop) + rule X -Word chop(Y) => chop(X -Int Y) [simplification] + + rule ADDR in (SetItem(I) REST) => ADDR in REST requires #notPrecompileAddress(ADDR) andBool notBool #notPrecompileAddress(I) [simplification] + + // ######################## + // Map + // ######################## + + rule M [ K <- V ] => M requires #lookup(M, K) ==Int V [simplification] + + rule M:Map [ K1 <- _ ] [ K2 <- V2 ] [ K1 <- V1' ] => M [ K1 <- V1' ] [ K2 <- V2 ] requires K1 =/=Int K2 [simplification] + + // ######################## + // Arithmetic + // ######################## + + rule X <=Int maxUInt48 &Int (X +Int Y) => false + requires #rangeUInt(48, X) + andBool #rangeUInt(48, Y) + andBool notBool #rangeUInt(48, X +Int Y) [simplification] + + rule chop(N +Int M) true requires #rangeUInt(256, N) + andBool #rangeUInt(256, M) + andBool notBool #rangeUInt(256, N +Int M) + [simplification] + + // This lemma is considered "safe enough" because `keccak` is a hash function over a large range and is very unlikely to overflow. + // Note that this case comes from a solidity struct being accessed (hence the integer offsets), so it's an assumption built into the Solidity compiler anyway. + rule chop(keccak(BA) +Int N) => keccak(BA) +Int N requires 0 <=Int N andBool N chop(X *Int Y) [simplification] + + // Proof #rangeUInt(256, X) andBool #rangeSInt(256, Y) andBool #rangeSInt(256, X *Int Y) andBool Y =/=Int 0 + // chop(X *Int Y) /sWord chop(Y) + // => #sgnInterp(sgn(chop(X *Int Y)) *Int sgn(chop(Y)), abs(chop(X *Int Y)) /Word abs(chop(Y))) + // Focus: sgn(chop(X *Int Y)) *Int sgn(chop(Y)) + // case 0 <=Int Y + // sgn(chop(X *Int Y)) *Int sgn(chop(Y)) + // => sgn(chop(X *Int Y)) *Int sgn(Y) // chop(Y) ==Int Y + // => sgn(X *Int Y) *Int sgn(Y) // 0 <=Int X andBool 0 <=Int Y + // => 1 *Int 1 // 0 <=Int X *Int Y andBool 0 <=Int Y + // => 1 + // case Y sgn(X *Int Y +Int pow256) *Int sgn(Y +Int pow256) // chop(Y) ==Int Y +Int pow256 + // => -1 *Int -1 // X *Int Y 1 + // Focus: abs(chop(X *Int Y)) /Word abs(chop(Y)) + // case 0 <=Int Y + // abs(chop(X *Int Y)) /Word abs(chop(Y)) + // => abs(chop(X *Int Y)) /Int abs(chop(Y)) + // => abs(X *Int Y) /Int abs(Y) // 0 <=Int X andBool 0 <=Int Y andBool #rangeSigne andBool chop(Y) ==Int Y + // => X *Int Y /Int Y // #rangeSInt(256, X *Int Y) andBool 0 <=Int X *Int Y andBool #rangeSInt(256, Y) andBool 0 <=Int Y + // => X + // case Y abs(X *Int Y +Int pow256) /Int abs(Y +Int pow256) // #rangeSInt(256, X *Int Y) andBool chop(Y) ==Int Y +Int pow256 + // => (0 -Word (X *Int Y +Int pow256)) /Int (0 -Word (Y +Int pow256)) // #rangeSInt(256, X *Int Y) andBool X *Int Y (pow256 -Int (X *Int Y +Int pow256)) /Int (pow256 -Int (Y +Int pow256)) // 0 (X *Int Y) /Int Y + // => X + // + // Via Z3 4.7.1: + // ; 2^4 and 2^3 instead of 2^256 and 2^255 for small model proof + // (declare-const pow256 Int) + // (assert (= pow256 16)) + // (declare-const pow255 Int) + // (assert (= pow255 8)) + // + // ; sgn + // (declare-fun sgn (Int) Int) + // (assert (forall ((x Int)) (=> (and (>= x 0) (< x pow255)) (= (sgn x) 1)))) + // (assert (forall ((x Int)) (=> (and (>= x pow255) (< x pow256)) (= (sgn x) -1)))) + // + // ; s (and (= (sgn x) 1) (= (sgn y) 1)) (= (slt x y) (< x y))))) + // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) 1) (= (sgn y) -1)) (= (slt x y) false)))) + // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) -1) (= (sgn y) 1)) (= (slt x y) true)))) + // (assert (forall ((x Int) (y Int)) (=> (and (= (sgn x) -1) (= (sgn y) -1)) (= (slt x y) (> x y))))) + // + // ; chop + // (define-fun chop ((x Int)) Int (mod x pow256)) + // + // ; /Word + // ;(define-fun zdiv ((x Int) (y Int)) Int (ite (= y 0) 0 (div x y))) + // (define-fun zdiv ((x Int) (y Int)) Int (div x y)) ; y is non-zero in the query below + // + // ; /sWord + // (declare-fun sdiv (Int Int) Int) + // (assert (forall ((x Int) (y Int)) (=> (> (* (sgn x) (sgn y)) 0) (= (sdiv x y) (zdiv (abs x) (abs y)) )))) + // (assert (forall ((x Int) (y Int)) (=> (< (* (sgn x) (sgn y)) 0) (= (sdiv x y) (- (zdiv (abs x) (abs y))))))) + // + // ; uint256 + // (define-fun uint256 ((x Int)) Bool (and (>= x 0) (< x pow256))) + // + // ; sint256 + // (define-fun sint256 ((x Int)) Bool (and (>= x (- pow255)) (< x pow255))) + // + // ;;;; proof + // + // (declare-const x Int) + // (declare-const y Int) + // + // (assert (uint256 x)) + // (assert (sint256 y)) + // (assert (sint256 (* x y))) + // (assert (not (= y 0))) + // + // (assert (not + // (= (sdiv (chop (* x y)) (chop y)) x) + // )) + // (check-sat) + rule chop(X *Int Y) /sWord ( Y +Int pow256 ) => X requires #rangeUInt(256, X) andBool Y X requires #rangeUInt(256, X) andBool #rangeSInt(256, Y) andBool #rangeSInt(256, X *Int Y) andBool Y =/=Int 0 [simplification] + + rule maxUInt48 &Int (X +Int Y) true + requires #rangeUInt(48, X) + andBool #rangeUInt(48, Y) + andBool notBool (X +Int Y X *Int Y requires 0 <=Int X andBool 0 <=Int Y andBool X *Int Y false requires 0 <=Int Y [simplification] + rule X +Int Y false requires 0 <=Int Y [simplification] + + rule ((K |-> _) REST) [ K' <- undef ] => REST requires K ==K K' [simplification] + rule ((K |-> V) REST) [ K' <- undef ] => (K |-> V) (REST [ K' <- undef ]) requires K =/=K K' [simplification] + + rule chop( X -Int chop(Y)) => chop( X -Int Y) [simplification] + rule chop((X -Int chop(Y)) *Int Z) => chop((X -Int Y) *Int Z) [simplification] + + rule chop(X +Int pow256) => chop(X) [simplification] + rule chop(chop(X) *Int Y) => chop(X *Int Y) [simplification] + + rule (I1 +Int I2) -Int I1 => I2 [simplification] + + rule ((I1 -Int I2) -Int I3) +Int I2 => I1 -Int I3 [simplification] + + rule M:Map [ K1 <- _ ] [ K2 <- V2 ] [ K3 <- V3 ] [ K1 <- V4 ] => M [ K1 <- V4 ] [ K2 <- V2 ] [ K3 <- V3 ] requires K1 =/=Int K2 andBool K1 =/=Int K3 [simplification] + + rule chop(X *Int (Y +Int pow256)) => chop(X *Int Y) [simplification] + + // ######################## + // Boolean Logic + // ######################## + + rule X:Int ==Int A:Int orBool X ==Int B:Int orBool X ==Int C:Int orBool X ==Int D:Int => X ==Int D + requires X =/=Int A andBool X =/=Int B andBool X =/=Int C + [simplification] + + rule #if B #then C #else D #fi => C requires B [simplification] + rule #if B #then C #else D #fi => C requires notBool B [simplification] + +endmodule diff --git a/tests/specs/mcd-structured/vow-fess-fail-rough-spec.k b/tests/specs/mcd-structured/vow-fess-fail-rough-spec.k new file mode 100644 index 0000000000..8e979fa4bc --- /dev/null +++ b/tests/specs/mcd-structured/vow-fess-fail-rough-spec.k @@ -0,0 +1,229 @@ +requires "verification.k" + +module VOW-FESS-FAIL-ROUGH-SPEC + imports VERIFICATION + + // Vow_fess + claim [Vow.fess.fail.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => ?_ + _ => ?FAILURE:EndStatusCode + _VCallStack + _ + _ => ?_ + + Vow_bin_runtime + #computeValidJumpDests(Vow_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("fess", #uint256(ABI_tab)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth => ?_ + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vow_bin_runtime + ACCT_ID_STORAGE => ?_ACCT_ID_STORAGE + ACCT_ID_ORIG_STORAGE + Nonce_Vow => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vow) + + andBool (#rangeUInt(256, ABI_tab) + andBool (#rangeUInt(256, May) + andBool (#rangeUInt(256, Sin_era) + andBool (#rangeUInt(256, Sin) + andBool (lengthBytes(CD) <=Int 1250000000 + andBool (#rangeUInt(256, Junk_0) + andBool (#rangeUInt(256, Junk_1) + andBool (#rangeUInt(256, Junk_2))))))))) + + andBool #lookup(ACCT_ID_STORAGE, #Vow.wards[CALLER_ID]) ==Int May + andBool #lookup(ACCT_ID_STORAGE, #Vow.sin[TIME]) ==Int Sin_era + andBool #lookup(ACCT_ID_STORAGE, #Vow.Sin) ==Int Sin + andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vow.wards[CALLER_ID]) ==Int Junk_0 + andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vow.sin[TIME]) ==Int Junk_1 + andBool #lookup(ACCT_ID_ORIG_STORAGE, #Vow.Sin) ==Int Junk_2 + andBool #Vow.wards[CALLER_ID] =/=Int #Vow.sin[TIME] + andBool #Vow.wards[CALLER_ID] =/=Int #Vow.Sin + andBool #Vow.sin[TIME] =/=Int #Vow.Sin + andBool notBool ( + (((May:Int ==Int 1)) + andBool (((VCallValue:Int ==Int 0)) + andBool ((#rangeUInt(256, Sin_era:Int +Int ABI_tab:Int)) + andBool ((#rangeUInt(256, Sin:Int +Int ABI_tab:Int)))))) + ) + ensures + ?FAILURE =/=K EVMC_SUCCESS + + // Vow_adduu + claim [Vow.adduu.pass]: + #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Vow_bin_runtime + #computeValidJumpDests(Vow_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS + _ + 9777 => 9802 + #gas(VGas) => #gas ( ( VGas +Int -54 ) ) + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vow_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + ACCT_ID_ORIG_STORAGE + Nonce_Vow => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vow) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) + + [trusted] + +endmodule diff --git a/tests/specs/mcd-structured/vow-flog-fail-rough-spec.k b/tests/specs/mcd-structured/vow-flog-fail-rough-spec.k new file mode 100644 index 0000000000..1e6d4a2518 --- /dev/null +++ b/tests/specs/mcd-structured/vow-flog-fail-rough-spec.k @@ -0,0 +1,324 @@ +requires "verification.k" + +module VOW-FLOG-FAIL-ROUGH-SPEC + imports VERIFICATION + + // Vow_flog + claim [Vow.flog.fail.rough]: + #execute ~> CONTINUATION => #halt ~> CONTINUATION + NORMAL + ISTANBUL + true + + + _ => ?_ + _ => ?FAILURE:EndStatusCode + _VCallStack + _ + _ => ?_ + + Vow_bin_runtime + #computeValidJumpDests(Vow_bin_runtime) + ACCT_ID + CALLER_ID + #abiCallData("flog", #uint256(ABI_t)) +Bytes CD => ?_ + VCallValue + .WordStack => ?_ + .Bytes => ?_ + 0 => ?_ + #gas(VGas) => ?_ + 0 => ?_ + _ => ?_ + false + VCallDepth => ?_ + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vow_bin_runtime + + (#Vow.wait |-> Wait) + (#Vow.Sin |-> Sin) + (#Vow.sin[ABI_t] |-> Sin_t) + ACCT_ID_STORAGE => ?ACCT_ID_STORAGE + + ACCT_ID_ORIG_STORAGE + Nonce_Vow => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vow) + + andBool (#rangeUInt(256, ABI_t) + andBool (#rangeUInt(256, Wait) + andBool (#rangeUInt(256, Sin_t) + andBool (#rangeUInt(256, Sin) + andBool (lengthBytes(CD) <=Int 1250000000))))) + + andBool notBool ( + (((ABI_t:Int +Int Wait:Int <=Int TIME:Int)) + andBool (((VCallValue:Int ==Int 0)) + andBool ((#rangeUInt(256, ABI_t:Int +Int Wait:Int)) + andBool ((#rangeUInt(256, Sin:Int -Int Sin_t:Int)))))) + ) + ensures + ?FAILURE =/=K EVMC_SUCCESS + + // Vow_adduu + claim [Vow.adduu.pass]: + #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Vow_bin_runtime + #computeValidJumpDests(Vow_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x +Int ABI_y : WS + _ + 9777 => 9802 + #gas(VGas) => #gas ( ( VGas +Int -54 ) ) + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vow_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + ACCT_ID_ORIG_STORAGE + Nonce_Vow => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x +Int ABI_y))))))) + andBool #rangeNonce(Nonce_Vow) + + [trusted] + + // Vow_subuu + claim [Vow.subuu.pass]: + #execute ~> CONTINUATION => #execute ~> CONTINUATION + NORMAL + ISTANBUL + true + + + VOutput => VOutput + _ => ?_ + _VCallStack + _ + _ => ?_ + + Vow_bin_runtime + #computeValidJumpDests(Vow_bin_runtime) + ACCT_ID + CALLER_ID + _ => ?_ + VCallValue + ABI_y : ABI_x : JMPTO : WS => JMPTO : ABI_x -Int ABI_y : WS + _ + 9803 => 9828 + #gas(VGas) => #gas ( ( VGas +Int -54 ) ) + VMemoryUsed + _ => ?_ + _ + VCallDepth + + + _VSelfDestruct + _ => ?_ + _Vrefund => ?_ + _ => ?_ + _ => ?_ + + _ + ORIGIN_ID + _ + + _ + _ + _ + _ + _ + _ + _ + _ + _BLOCK_NUMBER + _ + _ + TIME + _ + _ + _ + _ + _ + _ + _ + _ + _ + + + + VChainId + + + ACCT_ID + ACCT_ID_balance + Vow_bin_runtime + ACCT_ID_STORAGE => ACCT_ID_STORAGE + ACCT_ID_ORIG_STORAGE + Nonce_Vow => ?_ + _ + + ... + + _ + _ + _ + + + requires #rangeAddress(ACCT_ID) + andBool ACCT_ID =/=Int 0 + andBool #notPrecompileAddress(ACCT_ID) + andBool #rangeAddress(CALLER_ID) + andBool #rangeAddress(ORIGIN_ID) + andBool #rangeUInt(256, TIME) + andBool #rangeUInt(256, ACCT_ID_balance) + andBool VCallDepth <=Int 1024 + andBool #rangeUInt(256, VCallValue) + andBool #rangeUInt(256, VChainId) + andBool #rangeNonce(Nonce_Vow) + + andBool (#rangeUInt(256, ABI_x) + andBool (#rangeUInt(256, ABI_y) + andBool ((#sizeWordStack(WS) <=Int 100) + andBool (#rangeUInt(256, VMemoryUsed) + andBool ((#rangeUInt(256, ABI_x -Int ABI_y))))))) + + [trusted] + +endmodule diff --git a/tests/specs/mcd-structured/word-pack.k b/tests/specs/mcd-structured/word-pack.k new file mode 100644 index 0000000000..cf8be5c278 --- /dev/null +++ b/tests/specs/mcd-structured/word-pack.k @@ -0,0 +1,29 @@ +requires "evm-types.md" + + // + // The Solidity compiler sometimes packs together multiple arguments into one storage location, for optimized reads/writes. + // Because the packed variables are all smaller than a `uint256`, they can fit into one word. + // If you use the pattern `SOMETHING ==K #WordPack*(ARG1, ..., ARGN)` in your side-conditions, you're actually making several assertions about `SOMETHING` and `ARG1 ... ARGN`. + // First, you're asserting that each `ARGi` can be unpacked from the variable `SOMETHING` using the correct accessors. + // Second, you're asserting that `SOMETHING` contains no other values than the packed `ARGi` (so we add a range condition to `SOMETHING`). + // This allows us to turn the side-condition SOMETHING ==K #WordPack*(ARG1, ..., ARGN)` into the more useful side-conditions `ARG1 ==K access1(SOMETHING) andBool ... andBool ARGN ==K accessN(SOMETHING)`. + // The arguments are packed in reverse order, so that the highest bits are set by the last argument. + // + // When updating variables which originally contained `WordPack*`, the Solidity compiler will mask the original value everywhere _except_ where you're updating. + // Then the update will be bitwise `|Int` with the masked value, and the new value written back. + // Here we provide the masks which are used by the Solidity compiler, and rules which fold these bitwise updates back up into semantic `#WordPack*` arguments for the purposes of matching the RHS of proofs. + // + +module WORD-PACK + imports EVM-TYPES + imports BUF + + syntax Int ::= #WordPackUInt48UInt48 ( Int , Int ) [function] + | #WordPackAddrUInt48UInt48 ( Int , Int , Int ) [function] + | #WordPackAddrUInt8 ( Int , Int ) [function] + // ----------------------------------------------------------------------------------------------------------------- + rule #WordPackUInt48UInt48 ( UINT48_1 , UINT48_2 ) => #asWord ( #buf(20, 0) +Bytes #buf(6, UINT48_2) +Bytes #buf(6, UINT48_1) ) requires #rangeUInt(48, UINT48_1) andBool #rangeUInt(48, UINT48_2) + rule #WordPackAddrUInt48UInt48 ( ADDR , UINT48_1 , UINT48_2 ) => #asWord ( #buf(6, UINT48_2) +Bytes #buf(6, UINT48_1) +Bytes #buf(20, ADDR) ) requires #rangeAddress(ADDR) andBool #rangeUInt(48, UINT48_1) andBool #rangeUInt(48, UINT48_2) + rule #WordPackAddrUInt8 ( ADDR , UINT8 ) => #asWord ( #buf(11, 0) +Bytes #buf(1, UINT8) +Bytes #buf(20, ADDR) ) requires #rangeAddress(ADDR) andBool #rangeUInt(8, UINT8) + +endmodule diff --git a/tests/specs/mcd/verification.k b/tests/specs/mcd/verification.k index 3f5f7b22f2..784e107874 100644 --- a/tests/specs/mcd/verification.k +++ b/tests/specs/mcd/verification.k @@ -48,7 +48,7 @@ module LEMMAS-MCD-SYNTAX endmodule module LEMMAS-MCD [symbolic] - imports LEMMAS + imports LEMMAS-WITHOUT-SLOT-UPDATES imports LEMMAS-MCD-SYNTAX imports WORD-PACK @@ -61,7 +61,7 @@ module LEMMAS-MCD [symbolic] rule sgn(chop(X)) ==Int 1 => 0 <=Int X requires #rangeSInt(256, X) [simplification] rule sgn(chop(X)) ==Int -1 => X X ==Int 0 requires #rangeSInt(256, X) [simplification] + rule chop(X) ==Int 0 => X ==Int 0 requires #rangeSInt(256, X) [simplification, comm] rule bool2Word( X:Bool ) |Int bool2Word( Y:Bool ) => bool2Word(X orBool Y) [simplification] rule bool2Word( X:Bool ) ==Int 0 => notBool X [simplification] diff --git a/tests/specs/mcd/word-pack.k b/tests/specs/mcd/word-pack.k index 9466531dbf..e8d92fb990 100644 --- a/tests/specs/mcd/word-pack.k +++ b/tests/specs/mcd/word-pack.k @@ -113,9 +113,9 @@ module WORD-PACK-COMMON rule (maskWordPackUInt48UInt48_2 &Int UINT48_UINT48) /Int pow48 => maxUInt48 &Int (UINT48_UINT48 /Int pow48) requires #rangeUInt(96, UINT48_UINT48) [simplification] rule maskWordPackUInt48UInt48_1 &Int UINT48_UINT48 => maxUInt48 &Int UINT48_UINT48 requires #rangeUInt(96, UINT48_UINT48) [simplification] - rule (UINT48_2 *Int pow48) |Int (maskWordPackUInt48UInt48_1 &Int UINT48_UINT48) => #WordPackUInt48UInt48( (maskWordPackUInt48UInt48_1 &Int UINT48_UINT48), UINT48_2) requires #rangeUInt(96, UINT48_UINT48) andBool #rangeUInt(48, UINT48_2) [simplification] + rule (pow48 *Int UINT48_2) |Int (maskWordPackUInt48UInt48_1 &Int UINT48_UINT48) => #WordPackUInt48UInt48( (maskWordPackUInt48UInt48_1 &Int UINT48_UINT48), UINT48_2) requires #rangeUInt(96, UINT48_UINT48) andBool #rangeUInt(48, UINT48_2) [simplification] rule UINT48_1 |Int (maskWordPackUInt48UInt48_2 &Int UINT48_UINT48) => #WordPackUInt48UInt48( UINT48_1 , (maskWordPackUInt48UInt48_2 &Int UINT48_UINT48) /Int pow48 ) requires #rangeUInt(96, UINT48_UINT48) andBool #rangeUInt(48, UINT48_1) [simplification] - rule (UINT48_2 *Int pow48) |Int (maxUInt48 &Int UINT48_UINT48) => #WordPackUInt48UInt48( maxUInt48 &Int UINT48_UINT48 , UINT48_2 ) requires #rangeUInt(96, UINT48_UINT48) andBool #rangeUInt(48, UINT48_2) [simplification] + rule (pow48 *Int UINT48_2) |Int (maxUInt48 &Int UINT48_UINT48) => #WordPackUInt48UInt48( maxUInt48 &Int UINT48_UINT48 , UINT48_2 ) requires #rangeUInt(96, UINT48_UINT48) andBool #rangeUInt(48, UINT48_2) [simplification] syntax Int ::= "maskWordPackAddrUInt48UInt48_2" [macro] // 0xFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF | "maskWordPackAddrUInt48UInt48_3" [macro] // 0x000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF @@ -126,8 +126,8 @@ module WORD-PACK-COMMON rule (ADDR |Int (notMaxUInt160 &Int ADDR_UINT48_UINT48)) /Int pow160 => ADDR_UINT48_UINT48 /Int pow160 requires #rangeUInt(256, ADDR_UINT48_UINT48) andBool #rangeAddress(ADDR) [simplification] rule (ADDR |Int (notMaxUInt160 &Int ADDR_UINT48_UINT48)) /Int pow208 => ADDR_UINT48_UINT48 /Int pow208 requires #rangeUInt(256, ADDR_UINT48_UINT48) andBool #rangeAddress(ADDR) [simplification] - rule (UINT48_2 *Int pow208) |Int (maskWordPackAddrUInt48UInt48_3 &Int ADDR_UINT48_UINT48) => #WordPackAddrUInt48UInt48(maxUInt160 &Int ADDR_UINT48_UINT48, maxUInt48 &Int (ADDR_UINT48_UINT48 /Int pow160), UINT48_2) requires #rangeUInt(256, ADDR_UINT48_UINT48) andBool #rangeUInt(48, UINT48_2) [simplification] - rule (UINT48_1 *Int pow160) |Int (maskWordPackAddrUInt48UInt48_2 &Int ADDR_UINT48_UINT48) => #WordPackAddrUInt48UInt48(maxUInt160 &Int ADDR_UINT48_UINT48, UINT48_1, maxUInt48 &Int (ADDR_UINT48_UINT48 /Int pow208)) requires #rangeUInt(256, ADDR_UINT48_UINT48) andBool #rangeUInt(48, UINT48_1) [simplification] + rule (pow208 *Int UINT48_2) |Int (maskWordPackAddrUInt48UInt48_3 &Int ADDR_UINT48_UINT48) => #WordPackAddrUInt48UInt48(maxUInt160 &Int ADDR_UINT48_UINT48, maxUInt48 &Int (ADDR_UINT48_UINT48 /Int pow160), UINT48_2) requires #rangeUInt(256, ADDR_UINT48_UINT48) andBool #rangeUInt(48, UINT48_2) [simplification] + rule (pow160 *Int UINT48_1) |Int (maskWordPackAddrUInt48UInt48_2 &Int ADDR_UINT48_UINT48) => #WordPackAddrUInt48UInt48(maxUInt160 &Int ADDR_UINT48_UINT48, UINT48_1, maxUInt48 &Int (ADDR_UINT48_UINT48 /Int pow208)) requires #rangeUInt(256, ADDR_UINT48_UINT48) andBool #rangeUInt(48, UINT48_1) [simplification] rule maxUInt48 &Int (maskWordPackUInt48UInt48_2 &Int A) => 0 requires 0 <=Int A [simplification] diff --git a/tests/specs/smoke b/tests/specs/smoke index 70f998addd..f42d27f46f 100644 --- a/tests/specs/smoke +++ b/tests/specs/smoke @@ -47,3 +47,21 @@ tests/specs/mcd/vat-subui-pass-rough-spec.k tests/specs/mcd/vat-subui-pass-spec.k tests/specs/mcd/vow-fess-fail-rough-spec.k tests/specs/mcd/vow-flog-fail-rough-spec.k +tests/specs/mcd-structured/cat-exhaustiveness-spec.k +tests/specs/mcd-structured/cat-file-addr-pass-rough-spec.k +tests/specs/mcd-structured/dai-symbol-pass-spec.k +tests/specs/mcd-structured/dsvalue-read-pass-spec.k +tests/specs/mcd-structured/dsvalue-read-pass-summarize-spec.k +tests/specs/mcd-structured/end-subuu-pass-spec.k +tests/specs/mcd-structured/flipper-tau-pass-spec.k +tests/specs/mcd-structured/flipper-ttl-pass-spec.k +tests/specs/mcd-structured/flopper-cage-pass-spec.k +tests/specs/mcd-structured/functional-spec.k +tests/specs/mcd-structured/vat-addui-fail-rough-spec.k +tests/specs/mcd-structured/vat-deny-diff-fail-rough-spec.k +tests/specs/mcd-structured/vat-mului-pass-spec.k +tests/specs/mcd-structured/vat-subui-fail-rough-spec.k +tests/specs/mcd-structured/vat-subui-pass-rough-spec.k +tests/specs/mcd-structured/vat-subui-pass-spec.k +tests/specs/mcd-structured/vow-fess-fail-rough-spec.k +tests/specs/mcd-structured/vow-flog-fail-rough-spec.k