-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path4.fc
126 lines (109 loc) · 28.8 KB
/
4.fc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
{-
TASK 4 - Caesar Cipher
Implement a Caesar cipher encryption and decryption functions.
The input is a string (https://docs.ton.org/develop/smart-contracts/guidelines/internal-messages#simple-message-with-comment)
where the text is encrypted in a cell (after 32bit 00000000 prefix flag), the algorithm rotates the characters and the last ASCII
character should go to the beginning. Return new text encoded in cell.
-}
() recv_internal() {
}
cell e_dict() asm "B{b5ee9c72410263010018b000020120280102012009020201d406030101200401fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040805a8041804280430500e0804480458046804780488049804a804b804c804d804e804f8050805180528053805480558056805780588059805b805c805d805e805f8060807a806180628063806480658066806780688069806a806b806c806d806e806f8070807180728073807480758076807780788079807b6f800101200701fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f80408059805a804180420800e08043804480458046804780488049804a804b804c804d804e804f805080518052805380548055805680578058805b805c805d805e805f80608079807a806180628063806480658066806780688069806a806b806c806d806e806f807080718072807380748075807680778078807b6f80020120190a020120120b0201200f0c0101200d01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080588059805a80410e00e080428043804480458046804780488049804a804b804c804d804e804f80508051805280538054805580568057805b805c805d805e805f806080788079807a806180628063806480658066806780688069806a806b806c806d806e806f80708071807280738074807580768077807b6f800101201001fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040805780588059805a1100e0804180428043804480458046804780488049804a804b804c804d804e804f8050805180528053805480558056805b805c805d805e805f8060807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f8070807180728073807480758076807b6f8002012016130101201401fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080568057805880591500e0805a804180428043804480458046804780488049804a804b804c804d804e804f805080518052805380548055805b805c805d805e805f80608076807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f807080718072807380748075807b6f800101201701fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080558056805780581800e08059805a804180428043804480458046804780488049804a804b804c804d804e804f80508051805280538054805b805c805d805e805f806080758076807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f80708071807280738074807b6f80020120211a0201201e1b0101201c01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080548055805680571d00e080588059805a804180428043804480458046804780488049804a804b804c804d804e804f8050805180528053805b805c805d805e805f8060807480758076807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f8070807180728073807b6f800101201f01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080538054805580562000e0805780588059805a804180428043804480458046804780488049804a804b804c804d804e804f805080518052805b805c805d805e805f80608073807480758076807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f807080718072807b6f8002012025220101202301fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080528053805480552400e08056805780588059805a804180428043804480458046804780488049804a804b804c804d804e804f80508051805b805c805d805e805f806080728073807480758076807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f80708071807b6f800101202601fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080518052805380542700e080558056805780588059805a804180428043804480458046804780488049804a804b804c804d804e804f8050805b805c805d805e805f8060807180728073807480758076807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f8070807b6f800201204829020120392a020120322b0201202f2c0101202d01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080508051805280532e00e0805480558056805780588059805a804180428043804480458046804780488049804a804b804c804d804e804f805b805c805d805e805f80608070807180728073807480758076807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f807b6f800101203001fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040804f8050805180523100e08053805480558056805780588059805a804180428043804480458046804780488049804a804b804c804d804e805b805c805d805e805f8060806f8070807180728073807480758076807780788079807a806180628063806480658066806780688069806a806b806c806d806e807b6f8002012036330101203401fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040804e804f805080513500e080528053805480558056805780588059805a804180428043804480458046804780488049804a804b804c804d805b805c805d805e805f8060806e806f8070807180728073807480758076807780788079807a806180628063806480658066806780688069806a806b806c806d807b6f800101203701fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040804d804e804f80503800e0805180528053805480558056805780588059805a804180428043804480458046804780488049804a804b804c805b805c805d805e805f8060806d806e806f8070807180728073807480758076807780788079807a806180628063806480658066806780688069806a806b806c807b6f80020120413a0201203e3b0101203c01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040804c804d804e804f3d00e08050805180528053805480558056805780588059805a804180428043804480458046804780488049804a804b805b805c805d805e805f8060806c806d806e806f8070807180728073807480758076807780788079807a806180628063806480658066806780688069806a806b807b6f800101203f01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040804b804c804d804e4000e0804f8050805180528053805480558056805780588059805a804180428043804480458046804780488049804a805b805c805d805e805f8060806b806c806d806e806f8070807180728073807480758076807780788079807a806180628063806480658066806780688069806a807b6f8002012045420101204301fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040804a804b804c804d4400e0804e804f8050805180528053805480558056805780588059805a804180428043804480458046804780488049805b805c805d805e805f8060806a806b806c806d806e806f8070807180728073807480758076807780788079807a806180628063806480658066806780688069807b6f800101204601fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f80408049804a804b804c4700e0804d804e804f8050805180528053805480558056805780588059805a80418042804380448045804680478048805b805c805d805e805f80608069806a806b806c806d806e806f8070807180728073807480758076807780788079807a80618062806380648065806680678068807b6f800201205849020120514a0201204e4b0101204c01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080488049804a804b4d00e0804c804d804e804f8050805180528053805480558056805780588059805a8041804280438044804580468047805b805c805d805e805f806080688069806a806b806c806d806e806f8070807180728073807480758076807780788079807a8061806280638064806580668067807b6f800101204f01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040804780488049804a5000e0804b804c804d804e804f8050805180528053805480558056805780588059805a804180428043804480458046805b805c805d805e805f8060806780688069806a806b806c806d806e806f8070807180728073807480758076807780788079807a806180628063806480658066807b6f8002012055520101205301fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080468047804880495400e0804a804b804c804d804e804f8050805180528053805480558056805780588059805a80418042804380448045805b805c805d805e805f80608066806780688069806a806b806c806d806e806f8070807180728073807480758076807780788079807a80618062806380648065807b6f800101205601fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080458046804780485700e08049804a804b804c804d804e804f8050805180528053805480558056805780588059805a8041804280438044805b805c805d805e805f806080658066806780688069806a806b806c806d806e806f8070807180728073807480758076807780788079807a8061806280638064807b6f8002012060590201205d5a0101205b01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080448045804680475c00e080488049804a804b804c804d804e804f8050805180528053805480558056805780588059805a804180428043805b805c805d805e805f8060806480658066806780688069806a806b806c806d806e806f8070807180728073807480758076807780788079807a806180628063807b6f800101205e01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080438044804580465f00e0804780488049804a804b804c804d804e804f8050805180528053805480558056805780588059805a80418042805b805c805d805e805f80608063806480658066806780688069806a806b806c806d806e806f8070807180728073807480758076807780788079807a80618062807b6f800101586101fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080428043804480456200e08046804780488049804a804b804c804d804e804f8050805180528053805480558056805780588059805a8041805b805c805d805e805f806080628063806480658066806780688069806a806b806c806d806e806f8070807180728073807480758076807780788079807a8061807b6f80ec704c02} B>boc PUSHREF";
cell d_dict() asm "B{b5ee9c72410263010018b000020120280102012009020201d406030101200401fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080428043804480450500e08046804780488049804a804b804c804d804e804f8050805180528053805480558056805780588059805a8041805b805c805d805e805f806080628063806480658066806780688069806a806b806c806d806e806f8070807180728073807480758076807780788079807a8061807b6f800101200701fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080438044804580460800e0804780488049804a804b804c804d804e804f8050805180528053805480558056805780588059805a80418042805b805c805d805e805f80608063806480658066806780688069806a806b806c806d806e806f8070807180728073807480758076807780788079807a80618062807b6f80020120190a020120120b0201200f0c0101200d01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080448045804680470e00e080488049804a804b804c804d804e804f8050805180528053805480558056805780588059805a804180428043805b805c805d805e805f8060806480658066806780688069806a806b806c806d806e806f8070807180728073807480758076807780788079807a806180628063807b6f800101201001fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080458046804780481100e08049804a804b804c804d804e804f8050805180528053805480558056805780588059805a8041804280438044805b805c805d805e805f806080658066806780688069806a806b806c806d806e806f8070807180728073807480758076807780788079807a8061806280638064807b6f8002012016130101201401fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080468047804880491500e0804a804b804c804d804e804f8050805180528053805480558056805780588059805a80418042804380448045805b805c805d805e805f80608066806780688069806a806b806c806d806e806f8070807180728073807480758076807780788079807a80618062806380648065807b6f800101201701fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040804780488049804a1800e0804b804c804d804e804f8050805180528053805480558056805780588059805a804180428043804480458046805b805c805d805e805f8060806780688069806a806b806c806d806e806f8070807180728073807480758076807780788079807a806180628063806480658066807b6f80020120211a0201201e1b0101201c01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080488049804a804b1d00e0804c804d804e804f8050805180528053805480558056805780588059805a8041804280438044804580468047805b805c805d805e805f806080688069806a806b806c806d806e806f8070807180728073807480758076807780788079807a8061806280638064806580668067807b6f800101201f01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f80408049804a804b804c2000e0804d804e804f8050805180528053805480558056805780588059805a80418042804380448045804680478048805b805c805d805e805f80608069806a806b806c806d806e806f8070807180728073807480758076807780788079807a80618062806380648065806680678068807b6f8002012025220101202301fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040804a804b804c804d2400e0804e804f8050805180528053805480558056805780588059805a804180428043804480458046804780488049805b805c805d805e805f8060806a806b806c806d806e806f8070807180728073807480758076807780788079807a806180628063806480658066806780688069807b6f800101202601fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040804b804c804d804e2700e0804f8050805180528053805480558056805780588059805a804180428043804480458046804780488049804a805b805c805d805e805f8060806b806c806d806e806f8070807180728073807480758076807780788079807a806180628063806480658066806780688069806a807b6f800201204829020120392a020120322b0201202f2c0101202d01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040804c804d804e804f2e00e08050805180528053805480558056805780588059805a804180428043804480458046804780488049804a804b805b805c805d805e805f8060806c806d806e806f8070807180728073807480758076807780788079807a806180628063806480658066806780688069806a806b807b6f800101203001fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040804d804e804f80503100e0805180528053805480558056805780588059805a804180428043804480458046804780488049804a804b804c805b805c805d805e805f8060806d806e806f8070807180728073807480758076807780788079807a806180628063806480658066806780688069806a806b806c807b6f8002012036330101203401fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040804e804f805080513500e080528053805480558056805780588059805a804180428043804480458046804780488049804a804b804c804d805b805c805d805e805f8060806e806f8070807180728073807480758076807780788079807a806180628063806480658066806780688069806a806b806c806d807b6f800101203701fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040804f8050805180523800e08053805480558056805780588059805a804180428043804480458046804780488049804a804b804c804d804e805b805c805d805e805f8060806f8070807180728073807480758076807780788079807a806180628063806480658066806780688069806a806b806c806d806e807b6f80020120413a0201203e3b0101203c01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080508051805280533d00e0805480558056805780588059805a804180428043804480458046804780488049804a804b804c804d804e804f805b805c805d805e805f80608070807180728073807480758076807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f807b6f800101203f01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080518052805380544000e080558056805780588059805a804180428043804480458046804780488049804a804b804c804d804e804f8050805b805c805d805e805f8060807180728073807480758076807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f8070807b6f8002012045420101204301fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080528053805480554400e08056805780588059805a804180428043804480458046804780488049804a804b804c804d804e804f80508051805b805c805d805e805f806080728073807480758076807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f80708071807b6f800101204601fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080538054805580564700e0805780588059805a804180428043804480458046804780488049804a804b804c804d804e804f805080518052805b805c805d805e805f80608073807480758076807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f807080718072807b6f800201205849020120514a0201204e4b0101204c01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080548055805680574d00e080588059805a804180428043804480458046804780488049804a804b804c804d804e804f8050805180528053805b805c805d805e805f8060807480758076807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f8070807180728073807b6f800101204f01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080558056805780585000e08059805a804180428043804480458046804780488049804a804b804c804d804e804f80508051805280538054805b805c805d805e805f806080758076807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f80708071807280738074807b6f8002012055520101205301fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080568057805880595400e0805a804180428043804480458046804780488049804a804b804c804d804e804f805080518052805380548055805b805c805d805e805f80608076807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f807080718072807380748075807b6f800101205601fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040805780588059805a5700e0804180428043804480458046804780488049804a804b804c804d804e804f8050805180528053805480558056805b805c805d805e805f8060807780788079807a806180628063806480658066806780688069806a806b806c806d806e806f8070807180728073807480758076807b6f8002012060590201205d5a0101205b01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f804080588059805a80415c00e080428043804480458046804780488049804a804b804c804d804e804f80508051805280538054805580568057805b805c805d805e805f806080788079807a806180628063806480658066806780688069806a806b806c806d806e806f80708071807280738074807580768077807b6f800101205e01fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f80408059805a804180425f00e08043804480458046804780488049804a804b804c804d804e804f805080518052805380548055805680578058805b805c805d805e805f80608079807a806180628063806480658066806780688069806a806b806c806d806e806f807080718072807380748075807680778078807b6f800101586101fe707172737475767778797a800b800c800d800e800f8010801180128013801480158016801780188019801a801b801c801d801e801f8020802180228023802480258026802780288029802a802b802c802d802e802f8030803180328033803480358036803780388039803a803b803c803d803e803f8040805a8041804280436200e0804480458046804780488049804a804b804c804d804e804f8050805180528053805480558056805780588059805b805c805d805e805f8060807a806180628063806480658066806780688069806a806b806c806d806e806f8070807180728073807480758076807780788079807b6f805ff39885} B>boc PUSHREF";
(cell) caesar_a(cell text, tuple shifts) inline {
slice textS = text.begin_parse();
var answer = begin_cell();
if(~ textS.slice_refs_empty?()) {
answer = answer.store_ref(caesar_a(textS~load_ref(), shifts));
}
repeat(textS.slice_bits() >> 6) {
int s1 = textS~load_uint(8);
int s2 = textS~load_uint(8);
int s3 = textS~load_uint(8);
int s4 = textS~load_uint(8);
int s5 = textS~load_uint(8);
int s6 = textS~load_uint(8);
int s7 = textS~load_uint(8);
int s8 = textS~load_uint(8);
int s11 = shifts.at(s1);
int s12 = shifts.at(s2);
int s13 = shifts.at(s3);
int s14 = shifts.at(s4);
int s15 = shifts.at(s5);
int s16 = shifts.at(s6);
int s17 = shifts.at(s7);
int s18 = shifts.at(s8);
answer = answer.store_uint(s11, 8);
answer = answer.store_uint(s12, 8);
answer = answer.store_uint(s13, 8);
answer = answer.store_uint(s14, 8);
answer = answer.store_uint(s15, 8);
answer = answer.store_uint(s16, 8);
answer = answer.store_uint(s17, 8);
answer = answer.store_uint(s18, 8);
}
repeat(textS.slice_bits() >> 3) {
answer = answer.store_uint(shifts.at(textS~load_uint(8)), 8);
}
return answer.end_cell();
}
(cell) caesar_b(cell text, tuple shifts) inline {
slice textS = text.begin_parse();
var answer = begin_cell();
if(~ textS.slice_refs_empty?()) {
answer = answer.store_ref(caesar_b(textS~load_ref(), shifts));
}
repeat(textS.slice_bits() >> 6) {
int s1 = textS~load_uint(8);
int s2 = textS~load_uint(8);
int s3 = textS~load_uint(8);
int s4 = textS~load_uint(8);
int s5 = textS~load_uint(8);
int s6 = textS~load_uint(8);
int s7 = textS~load_uint(8);
int s8 = textS~load_uint(8);
answer = s1 > 122 ? answer.store_uint(s1, 8) : answer.store_uint(shifts.at(s1), 8);
answer = s2 > 122 ? answer.store_uint(s2, 8) : answer.store_uint(shifts.at(s2), 8);
answer = s3 > 122 ? answer.store_uint(s3, 8) : answer.store_uint(shifts.at(s3), 8);
answer = s4 > 122 ? answer.store_uint(s4, 8) : answer.store_uint(shifts.at(s4), 8);
answer = s5 > 122 ? answer.store_uint(s5, 8) : answer.store_uint(shifts.at(s5), 8);
answer = s6 > 122 ? answer.store_uint(s6, 8) : answer.store_uint(shifts.at(s6), 8);
answer = s7 > 122 ? answer.store_uint(s7, 8) : answer.store_uint(shifts.at(s7), 8);
answer = s8 > 122 ? answer.store_uint(s8, 8) : answer.store_uint(shifts.at(s8), 8);
}
repeat(textS.slice_bits() >> 3) {
int t = textS~load_uint(8);
answer = t > 122 ? answer.store_uint(t, 8) : answer.store_uint(shifts.at(t), 8);
}
return answer.end_cell();
}
(tuple) execute (cont c) impure asm "EXECUTE";
;; testable
(cell) caesar_cipher_encrypt(int shift, cell text) method_id {
shift = shift % 26;
if(shift == 0) {
return text;
}
(slice v, int k) = e_dict().udict_get?(5, shift);
cont c = bless(v);
tuple shifts = execute(c);
try {
return caesar_a(text, shifts);
} catch(_, _) {
return caesar_b(text, shifts);
}
}
;; testable
(cell) caesar_cipher_decrypt(int shift, cell text) method_id {
shift = shift % 26;
if(shift == 0) {
return text;
}
(slice v, int k) = d_dict().udict_get?(5, shift);
cont c = bless(v);
tuple shifts = execute(c);
try {
return caesar_a(text, shifts);
} catch(_, _) {
return caesar_b(text, shifts);
}
}